IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring容器与注解开发 -> 正文阅读

[Java知识库]Spring容器与注解开发


?? ??? ?创建容器:
?? ??? ??? ?方式一:类路径加载配置文件
?? ??? ??? ?

ApplicationContext applicationContext = new 
 ClassPathXmlApplicationContext("applicationContext.xml");


?? ??? ??? ?方式二:文件路径加载配置文件
?? ??? ???

?ApplicationContext applicationContext = new FileSystemXmlApplicationContext("D:\\applicationContext.xml");


?? ??? ??? ?方式三:加载多个配置文件
?? ??? ??? ?

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean1.xml","bean2.xml");


?? ??? ?获取bean:
?? ??? ??? ?方式一:使用bean名称获取
?? ??? ??? ?

BookDao bookDao = (BookDao)applicationContext.getBean("bookDao");


?? ??? ??? ?方式一:使用bean名称获取并指定类型
?? ??? ??? ?

BookDao bookDao = applicationContext.getBean("bookDao",BookDao.class);


?? ??? ??? ?方式一:使用bean类型获取
?? ??? ??? ?

BookDao bookDao = applicationContext.getBean(BookDao.class);


?? ??? ?注解开发定义bean
?? ??? ??? ?使用@Component定义bean
?? ??? ???

?@Component("userDao")
?? ??? ??? ?public class BookDaoImpl implements BookDao {
?? ??? ??? ??? ?@Override
?? ??? ??? ??? ?public void save(){
?? ??? ??? ??? ??? ?System.out.println("book dao save ...");
?? ??? ??? ??? ?}
?? ??? ??? ?}


?? ??? ??? ?核心配置文件中通过组件扫描加载bean
?? ??? ? ?

 <context:component-scan base-package="com.sx"/>


?? ??? ? ? Spring提供@Component注解的三个衍生注解
?? ??? ? ? @Controller:用于定义表现层的bean
?? ??? ? ? @service:用于业务层bean定义
?? ??? ? ? @Repository:用于数据层bean定义
?? ?Spring3.0升级了纯注解开发模式,使用Java类替代配置文件
?? ??? ?Java类代替spring核心注解
?? ??? ???

?//定义当前类为配置类 ?@Configuration d代表xml的一个模板
?? ??? ??? ?@Configuration
?? ??? ??? ?//开启扫描
?? ??? ??? ?@ComponentScan("com.sx")
?? ??? ??? ?public class springConfig {
?? ??? ??? ?}
?? ??? ??? ?@ComponentScan注解用于设定扫描路径,此注解只能添加一次,多个数据请求用数组格式
?? ??? ??? ?@ComponentScan({"com.sx","com.sx1"})
?? ??? ? //初始化Spring容器ApplicationContext,加载配置文件
?? ??? ?// ? ? ? ?ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
? ? ? ? //加载配置类的格式初始
? ? ? ? ApplicationContext ctx= new AnnotationConfigApplicationContext(springConfig.class); 

?
?? ??? ? ??
?? ?依赖注入之自动装配
?? ??? ?使用@Autowired注解开启自动装配模式(按类型)
?? ??? ?

@Service
?? ??? ?public class BookSeriveImpl implements BookSerive {
?? ??? ??? ??? ?//设置当前属性注入(引用)
?? ??? ??? ?@Autowired
?? ??? ??? ?private BookDao bookDao;
?? ??? ??? ?//可以删除set方法
?? ??? ??? ?//public BookSeriveImpl(BookDao bookDao) {
?? ??? ??? ?// ?this.bookDao = bookDao;
?? ??? ??? ?//}
?? ??? ?
?? ??? ??? ?@Override
?? ??? ??? ?public ?void save(){
?? ??? ??? ??? ?System.out.println("book service save...");
?? ??? ??? ??? ?bookDao.save();
?? ??? ??? ?}
?? ??? ?}


?? ??? ? 注意:1.自动装配基于反射设计创建对象并暴力反射对应属性为私有属性初始化数据,由此无需提供setter方法
?? ??? ? 2.自动装配建议使用无参构造方法创建对象(默认),如果不提供对应的构造方法,请提供唯一的构造方法
?? ??? ?使用@Qualifier("***")注解开启指定名称装配
?? ???

?@Service
?? ??? ?public class BookSeriveImpl implements BookSerive {
?? ??? ??? ??? ?//设置当前属性注入(引用)
?? ??? ??? ?@Autowired
?? ??? ??? ?//使用注解设置注入的bean的id
?? ??? ??? ?@Qualifier("dao")
?? ??? ??? ?private BookDao bookDao;
?? ??? ?}


?? ??? ?注意:@Qualifier注解无法单独使用,必须配合@Autowired注解使用
?? ??? ?使用@Value实现简单类型注入
?? ??? ?

@Repository("bookDao")
?? ??? ?public class BookDaoImpl BookDao(){
?? ??? ??? ?@Value("100")
?? ??? ??? ?private String num;
?? ??? ?}


?? ??? ?
?? ??? ?使用@PropertySource注解加载properties文件
?? ???

?//定义当前类为配置类 ?@Configuration d代表xml的一个模板
?? ??? ?@Configuration
?? ??? ?//开启扫描
?? ??? ?@ComponentScan("com.sx")
?? ??? ?@PropertySource("classpath:jdbc.properties")
?? ??? ?public class SpringConfg{
?? ??? ?}


?? ??? ?注意:路径仅支持单一文件配置,多文件请属于数组格式配置,不允许使用通配符*

这是自己一个小Demo 运行结果

?config包下代码

package com.sx.config;


import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

//定义当前类为配置类  @Configuration d代表xml的一个模板
@Configuration
//开启扫描
@ComponentScan("com.sx")
//加载外部properties文件
@PropertySource("jdbc.properties")
public class springConfig {
}

BookDaoImpl下代码

package com.sx.Dao.Impl;

import com.sx.Dao.BookDao;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;

//1.将要定义的bean所在的类上添加@Component,相当于是   <bean id="userDao" class="com.sx.Dao.Impl.BookDaoImpl"/>
//@Component("userDao")
@Repository("dao")
public class BookDaoImpl implements BookDao {
    @Override
    public void save(){
        System.out.println("book dao save ...");
    }
}

BookDao代码

package com.sx.Dao;

import org.springframework.stereotype.Repository;

public interface BookDao {
    public void save();
}

BookServiceImpl下代码

package com.sx.Service.Impl;

import com.sx.Dao.BookDao;
import com.sx.Service.BookSerive;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

@Service
public class BookSeriveImpl implements BookSerive {
        //设置当前属性注入(引用)
    @Autowired
    //使用注解设置注入的bean的id
    @Qualifier("dao")
    private BookDao bookDao;
    @Autowired
    @Value("${name}")
    private String name;
    //可以删除set方法
    //public BookSeriveImpl(BookDao bookDao) {
      //  this.bookDao = bookDao;
    //}

    @Override
    public  void save(){
        System.out.println("book service save..."+name);
        bookDao.save();
    }
}

BookService下代码

package com.sx.Service;

import com.sx.Dao.BookDao;

public interface BookSerive  {
    public void save();
}

test测试类代码

package com.sx;

import com.sx.Dao.BookDao;
import com.sx.Dao.Impl.BookDaoImpl;
import com.sx.Service.BookSerive;
import com.sx.config.springConfig;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.testng.annotations.Test;


public class test {
    @Test
    public void test(){
        //初始化Spring容器ApplicationContext,加载配置文件
//        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        //加载配置类的格式初始
        ApplicationContext ctx= new AnnotationConfigApplicationContext(springConfig.class);


        //通过容器获取testDao实例
//        BookDaoImpl book = (BookDaoImpl) ctx.getBean(BookDao.class);
//        book.save();
        BookSerive bean = ctx.getBean(BookSerive.class);
        bean.save();
    }
}

jdbc.properties下 就只有一个对name赋值

name=sx

applicationContext.xml文件可要不可要

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation=
               "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
               http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

<!--    将对象的创建权交由spring管理-->
<!--    <bean id="userDao" class="com.sx.Dao.Impl.BookDaoImpl"/>-->
<!--    2.在容器中发现bean,挨个文件遍历  称为扫描-->
<!--   <context:component-scan base-package="com.sx"/>-->
</beans>

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-09-30 00:38:26  更:2022-09-30 00:39:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年3日历 -2025/3/10 15:54:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码