bean的三种创建方式:
方式一: 使用类构造器实例化对象
<!-- 方式一 使用构造器(无参数)实例化对象 -->
<bean id="bean1"
class="cn.itcast.spring.b_instance.Bean1" />
方式二: 使用静态工厂 静态方法,对对象实例化
<!-- 方式二 使用静态工厂实例化对象 -->
<!-- 调用 工厂的 factory-method 返回对象 -->
<bean id="bean2"
class="cn.itcast.spring.b_instance.Bean2Factory" factory-method="getBean2" />
方式三: 使用实例工厂 实例方法 对对象实例化
<!-- 方式三 使用实例工厂实例化对象 -->
<!-- 先实例化工厂 -->
<bean id="bean3Factory" class="cn.itcast.spring.b_instance.Bean3Factory" />
<!-- 再通过工厂对象的实例方法,构造目标对象 -->
<bean id="bean3" factory-bean="bean3Factory"
factory-method="getBean3" />
应用场景: 大多数情况,可以通过构造器直接实例化, 只有在对象构造过程非常复杂的情况下,才会采用工厂实例化的方式
bean的作用域:
Spring为Bean对象,提供五种作用域:
最常用 singleton 和 prototype 两种
Singleton (单例): 在一个BeanFactory对象中,引用唯一的一个目标实例(记住)
Prototype (多例): 每次通过工厂执行getBean时,返回不同实例对象(记住)
Request (请求范围) : 创建对象保存在request范围,如果request销毁,对象销毁
Session (会话范围): 创建对象保存Session中, 如果session销毁,对象销毁
* globalSession (全局会话 ) :分布式系统,全局会话的概念, 一次登录,应用多个系统(了解就可)
单例Bean 在容器初始化时,实例化 (只实例化一次 )
多例Bean 在工程执行getBean时 才会实例化 (每调用一次,返回不同对象 )
bean的生命周期:
可以通过 init-method属性配置 Bean对象初始化执行方法,destory-method属性配置Bean对象销毁的方法
(初始化方法和构造方法 有区别? 构造方法作用申请空间,为对象基本属性初始化 , 初始化方法 对象复杂构造过程 , java语言建议将对象复杂构造过程单独抽取 初始化方法 )
配置文件:
按照上述这么配置:
写测试代码:
查看调用的时机:
发现并没有执行LifeCycleBean 销毁这条代码。
原因:
在对象构造后,立即执行初始化init , 默认没有执行destroy 销毁方法