目录
一、加载配置文件
1.1、相对位置
1.1.1、准备工作,新建一个maven项目,修改pom.xml环境,添加依赖
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.4.RELEASE</version> </dependency>
新建两个测试方法,一个资源目录resources,新建一个spring.xml配置文件,从官网复制黏贴规范。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="userService" class="com.wode.service.UserService" /> <bean id="userDao" class="com.wode.dao.UserDao" /> </beans>
1.1.2、相对位置
ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");
2、绝对位置
1.2.1、获取xml配置文件的绝对位置
1.2.2、使用FileSystemXmlApplicationContext类接收绝对地址
ApplicationContext ac = new FileSystemXmlApplicationContext("D:\\IDEA\\spring11\\src\\main\\resources\\spring.xml");
3、多配置文件——传多个文件名
1.3.1、资源目录下创建两个xml配置文件添加规范和bean标签
1.3.2、还是使用ClassPathXmlApplicationContext,不过里面添加多个配置文件,逗号隔开
缺点:每次使用都需要手动输入,容易出错,所以推荐使用一个总配置文件使用import的方式
ApplicationContext ac = new ClassPathXmlApplicationContext("dao.xml","service.xml");
4、多配置文件——总配置文件通过import方式
1.4.1、新建一个总配置文件,添加import标签,导入两个配置文件
1.4.2、使用相对路径加载配置文件
ApplicationContext ac = new ClassPathXmlApplicationContext("sum.xml");
二、bean对象的实例化
2.1、构造器实例化
(。。前期准备工作同“1.1.1”。。)
2.1.1、构造器实例化就是使用默认方式或者类中定义的构造方法来创建对象
2.1.2、测试
注意:构造器方法时必须有默认构造方法即空构造方法。没有自定义构造方法时可以不写(默认),但如果有自定义构造方法就必写空构造方法。
2、静态工厂实例化
2.2.1、创建一个factory包,包中创建一个静态工厂类,编写创造UserService对象的静态方法
2.2.2、编写bean标签
虽然是创建的UserService对象,但是是通过静态工厂实现,所以class路径要修改成静态工厂的路径,使用的方法也要在bean标签中通过“factory-method”填写
2.2.3、测试
3、实例化工厂实例化
2.3.1、工厂中编写普通方法(“StaticFactory”名字没有改,但不是静态工厂哈)
2.3.2、编写bean标签
众所周知,静态方法可以直接调用,但是非静态需要先new一个对象,通过对象加“."的方式调用。所以这里先实例化工厂对象,然后在在实例化UserService对象时使用工厂对象完成实例化
2.3.2、测试
三、IOC注入
(。。。准备同1.1.1。。。)
1、set方式(手动)
3.1.1、在UserService中编写set方法
3.1.2、编写bean标签注入
1.使用property标签注入
2.name:属性名
3.ref:bean对象的id
4.value:值
2、构造器注入(手动)
3.2.1、编辑构造函数和测试
3.2.2、编写bean标签
1.使用constructor-arg标签注入
2.name:属性名
3.ref:bean对象的id
4.value:值
5.index:下标,从0开始
3、工厂注入(手动)
3.3.1、静态工厂注入
3.3.1.1、新建一个factory包,新建一个静态工厂类,创建一个静态方法
3.3.1.2、 UserService中创建构造方法(或者set方法)
3.3.1.3、编辑bean标签,使用 静态工厂 实例化 userDao对象,并注入(或者property标签)
3.3.2、实例化工厂注入
3.3.2.1、创建普通方法
3.3.2.2、创建set方法
3.3.2.3、使用 实例化工厂 实例化 UserDao对象,并注入
4、注解@Resource注入(自动)
(。。。重置到1.1.1。。。)
3.4.1、spring.xml配置文件中创建环境(下划线部分)
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
3.4.2、开启自动注入
<context:annotation-config></context:annotation-config>
3.4.3、编辑UserService添加注释
注释通过三种方式寻找bean标签对应的对象——name(id),属性名(id),类名(class)
1、name:
@Resource(name="userDao")
使用name时,属性名和类名不在查找。其中name=bean标签的id
2、属性名:
@Resource
private UserDao userDao;
没有name时,userDao(属性名)和bean标签中id一致,类名不在查找
3.类名:
@Resource
private UserDao us;
没有name,属性名和bean标签中id不一致,通过Bean中class查找对应的类
可以使用set
@Resource private UserDao userDao; public void setUserDao(UserDao userDao) { this.userDao = userDao; }
或
private UserDao userDao; @Resource public void setUserDao(UserDao userDao) { this.userDao = userDao; }
3.4.4、测试
5、注解@Autowired注入(自动)
3.5.1、环境同上
3.5.2、使用Autowired注解,并测试
@Autowired注解不在通过属性名查找对应的id,直接使用class方式(类型=class)
@Autowired+@Qualifier(value="")和@Resource(name="")作用一致,value必须和bean标签中id一致
四、IOC扫描器
(。。。重置到1.1.1。。。)
4.1、spring.xml配置文件中创建环境(下划线部分)
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
4.2、开启扫描器扫描范围,不写bean标签,通过扫描器自动生成
<context:component-scan base-package="com.wode"/>
4.3、通过标签,自动生成bean,注释注入可以不用开启自动注入
dao层
@Repository
service层
@Service
controller层
@Controller
任意层
@Component
四个注释作用相同,通过不同名称表示不同层级。默认id为类型首字母小写
4.4、测试