Spring IoC
1-IoC介绍
2021-08-20 395 2
简介 IoC的原理
1. IoC的原理
1、什么是 IOC
(1)控制反转,把对象创建和对象之间的调用过程,交给 Spring 进行管理
(2)使用 IOC 目的:为了耦合度降低
(3)做入门案例就是 IOC 实现
2、 IOC 底层原理
(1) xml 解析、工厂模式(IoC容器)、反射
2. IoC容器介绍
1、 IOC 思想基于 IOC 容器完成, IOC 容器底层就是对象工厂
2、 Spring 提供 IOC 容器实现两种方式:(两个接口)
(1) BeanFactory: IOC 容器基本实现,是 Spring 内部的使用接口,不提供开发人员进行使用
* 加载配置文件时候不会创建对象,在获取对象(使用)才去创建对象
(2) ApplicationContext: BeanFactory 接口的子接口,提供更多更强大的功能,一般由开发人
员进行使用
* 加载配置文件时候就会把在配置文件对象进行创建
两个方法的参数是 Spring配置文件xml的路径
FileSystemXmlApplicationContext配置路径是系统盘的路径
ClassPathXmlApplicationContext配置路径是当前src路径
3. IoC操作
1、什么是 Bean 管理
(0) Bean 管理指的是两个操作
(1) Spring 创建对象
(2) Spirng 注入属性
2、 Bean 管理操作有两种方式
(1)基于 xml 配置文件方式实现
(2)基于注解方式实现
1、基于 xml 方式创建对象
(1)在 spring 配置文件中,使用 bean 标签,标签里面添加对应属性,就可以实现对象创建
(2)在 bean 标签有很多属性,介绍常用的属性
* id 属性:唯一标识
* class 属性:类全路径(包类路径)
(3)创建对象时候,默认也是执行无参数构造方法完成对象创建
2、基于 xml 方式注入属性
(1) DI:依赖注入,就是注入属性
如果不适用Spring框架,可以使用有参构造器、setXxx方法,给属性赋值(注入属性)
4. 属性注入
三种方式
5. 注入空值和特殊字符
特殊字符的书写顺序:
<!>
<![]>
<![[]]>
<![CDATA[]]>
6. 外部Bean的注入
7. 集合的注入
8. 注入List,value是对象
9. FactoryBean的使用
xml中配置的class路径跟实际返回的对象类型可以不一样。
第一步 创建类,让这个类作为工厂 bean,实现接口 FactoryBean
第二步 实现接口里面的方法,在实现的方法中定义返回的 bean 类型
10. bean的单实例和多实例对象
如何设置单实例还是多实例
(1)在 spring 配置文件 bean 标签里面有属性( scope)用于设置单实例还是多实例
(2) scope 属性值
第一个值 默认值, singleton,表示是单实例对象
第二个值 prototype,表示是多实例对象
(3) singleton 和 prototype 区别
第一 singleton 单实例, prototype 多实例
第二 设置 scope 值是 singleton 时候,加载 spring 配置文件时候就会创建单实例对象
设置 scope 值是 prototype 时候,不是在加载 spring 配置文件时候创建 对象,在调用
getBean 方法时候创建多实例对象
11. Bean的生命周期
(1)通过构造器创建 bean 实例(无参数构造)
(2)为 bean 的属性设置值和对其他 bean 引用(调用 set 方法)
(3)调用 bean 的初始化的方法(需要进行配置初始化的方法)
(4) bean 可以使用了(对象获取到了)
(5)当容器关闭时候,调用 bean 的销毁的方法(需要进行配置销毁的方法)
bean 的后置处理器, bean 生命周期有七步
(1)通过构造器创建 bean 实例(无参数构造)
(2)为 bean 的属性设置值和对其他 bean 引用(调用 set 方法)
(3)把 bean 实例传递 bean 后置处理器的方法 postProcessBeforeInitialization
(4)调用 bean 的初始化的方法(需要进行配置初始化的方法)
(5)把 bean 实例传递 bean 后置处理器的方法 postProcessAfterInitialization
(6) bean 可以使用了(对象获取到了)
(7)当容器关闭时候,调用 bean 的销毁的方法(需要进行配置销毁的方法)
输出结果
1. BeanLife()...
2. setId
----before init----
3. initMethod()...
----before init----
4. get object: BeanLife{id=11}
5. destoryMethod()...
16. XML的自动装配(基本不用,都是基于注解实现)
(1)根据属性名称自动注入
<!--实现自动装配
bean 标签属性 autowire,配置自动装配
autowire 属性常用两个值:
byName 根据属性名称注入 ,注入值 bean 的 id 值和类属性名称一样
byType 根据属性类型注入
-->