三、DI
1、什么是DI?
DI(Dependency Injection):依赖注入:将对象(dao)从IOC容器中拿出来赋值给调用者(service)
2、DI的方式
1、构造方法注入
标签:constructor-arg
要求:必须提供构造方法
=====给谁赋值=====
name:构造方法的参数名称
index:构造方法中参数的索引位置
====赋什么值======
value:基本类型数据
ref:另一个bean标签的id值
构造方法
注入
![](https://i-blog.csdnimg.cn/direct/6158efc6b72446068b3ac51396f417fd.png)
2、set方法注入
标签:
要求:必须提供set方法
=====给谁赋值=====
name:对象的属性名(setXXX)
====赋什么值======
value:基本类型数据
ref:另一个bean标签的id值
set方法
注入
![](https://i-blog.csdnimg.cn/direct/5b03c89f999e4e29b416ac642d439ad2.png)
3、自动注入
要求:必须提供set方法
原理:遍历ioc容器,并判断每个对象的类型,如类型一致则赋值
且注意添加 <bean autowire="byType">
四、BeanFactory和ApplicationContext
BeanFactory:顶级接口,使用对象时才创建
每次使用均创建,所以每个地址都不一样
ApplicationContext:子接口,加载配置文件时就创建对象
因为是提前创建好的,所以每次调用的都是同一个
五、spring bean五种作用域(bean放哪了)
singleton:单例,默认,ioc容器
prototype:多例,newInstance()
request:request域
session:session域
application:application域
单例和多例的使用场景?
单例:service、dao、SqlSessionFactory
多例:connection、sqlSession
六、spring bean的生命周期【重点】
单例:
[容器启动]--->构造方法(实例化)--->set方法(注入)--->init方法(初始化)--->[容器关闭]--->destroy方法(销毁bean)
多例:
[使用对象]--->构造方法(实例化)--->set方法(注入)--->init方法(初始化)---[jvm垃圾回收]--->destroy方法(销毁bean)