目录
对Bean的实例化管理
1.默认情况下调用类的无参构造方法进行
2.通过普通工厂进行对象实例化
3.通过静态工厂进行对象的实例化
spring对于bean的作用域
解释:
bean在spring容器中创建的策略【即:单例和多例】以及访问的返完为范围
补充:
管理的bean可以通过BeanFactory[多例]和ApplicationContext[单例]来控制,
还可以通过自己来设置作用域
编写位置:bean标签的属性
语法:scope="属性值"
属性值:
singleton: 单例模式【全局唯一 ====性能好 ====安全性低(默认方式)】
prototype:多例模式【全局不唯一====性能不好====安全性高】
作用域数据Web模块:
request: 一次请求创建一个对象
session: 一个会话创建一个对象
spring对于bean的声明周期
前提是单例模式下大致分为以下五个阶段:【以后会详细讲解】
1.实例化
2.属性赋值(DI,即依赖注入)
3.初始化 :实例化完成之后,立刻干的事【自动初始化】,有两种方式
3.1 接口初始化:实现InitializingBean接口中的afterPropertiesSet()
3.2 属性初始化:bean中的init-method属性绑定自己指定方法
4.使用操作:步骤3完成后,对象创建完整,能够直接使用
5.销毁:
5.1 接口销毁
5.2 属性销毁: bean中的destroy-method= “指定方法 ”
注意:只有垃圾回收机制才能销
解决办法:bean变为单例,关闭ApplicationContext容器,间接销毁了bean,带走单例创建 的JavaBean 。
applicationContext没有close()方法,子类ClassPathXmlApplicatoinContext中有
spring管理Bean的自动装配
先了解手动注入【标签注入】
构造和setter注入,在上一篇文章中有讲解
自动装配含义:
将对象用DI的编程思想 ,自动注入给调用者【替换标签】
编写位置:bean与 bean标签属性
编写语法:
autowire =" 属性值" 局部设置【只涉及一个bean】
default-autowire=" 属性值" 全局设置【在beans根标签中】
属性值:
byType | 按照Bean的类型 【类型:属性类型与Bean的class类型一致】 |
byName | 按照Bean的 id 属性 |
constructor | 按照Bean的类型通过构造方法注入 |
注意事项 :
1.按照类型装配,避免容器中有相同类型
2.按照名字装配,要保证需要的对象名在spring容器中有对应的id
3.可以同时进行全局与局部设置,就近原则
4.自动装配能简化代码配置,但是在大型项目中不推荐使用,可读性差