Bean的生命周期是怎么样的?Bean的作用域是怎样的?

简单来说,Spring Bean的生命周期只有四个阶段:实例化 Instantiation --> 属性赋值 Populate  --> 初始化 Initialization  --> 销毁 Destruction。

具体来说分为以下步骤:

1.当容器启动时,Bean的实例化。Bean容器找到配置文件中Spring Bean的定义。Bean容器利用Java Reflection API创建一个Bean的实例。

2.Bean的属性赋值。利用set()方法设置一些属性值。

3.如果实现了其他*Aware接口,就调用相应的方法。

如果Bean实现了BeanNameAware接口,调用setBeanName()方法,传入Bean的名字。

如果Bean实现了BeanClassLoaderAware接口,调用setBeanClassLoader()方法,传入ClassLoader对象的实例。

如果Bean实现了BeanFactoryAware接口,调用setBeanClassFacotory()方法,传入ClassLoader对象的实例。

4.执行BeanPostProcessor接口的postProcessBeforeInitialization方法。

5.执行InitializingBean接口的afeterPropertiesSet()方法。

6.执行配置文件中定义的init-method属性指定的方法。

7.执行BeanPostProcessor接口的postProcessAfterInitialization()方法。

8.bean存在与容器中。

9.当容器结束时,Bean要销毁时,执行DisposableBean接口的destroy()方法。

10.执行配置文件中的定义的destroy-method属性指定的方法。

11.bean销毁。

 

Bean的作用域

(1)singleton:默认作用域,单例bean,每个容器中只有一个bean的实例。

(2)prototype:为每一个bean请求创建一个实例。

(3)request:为每一个request请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收。

(4)session:与request范围类似,同一个session会话共享一个实例,不同会话使用不同的实例。

(5)global-session:全局作用域,所有会话共享一个实例。如果想要声明让所有会话共享的存储变量的话,那么这全局变量需要存储在global-session中。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值