您的位置:首页 > 编程语言 > Java开发

细小知识点之Spring

2015-07-30 15:08 423 查看
1.Spring框架支持以下五种bean的作用域:

singleton : bean在每个Spring ioc 容器中只有一个实例。
prototype:一个bean的定义可以有多个实例。
request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效。
session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
global-session:在一个全局的HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。

缺省的Spring bean 的作用域是Singleton.Spring框架中的单例bean不是线程安全的。

singleton作用域::Spring IoC创建一个唯一的实例bean,并存储在缓存中,之后所有的请求和引用,都将得到这个缓存中的bean

prototype作用域::每一个请求都会创建一个bean

2.Spring中bean的生命周期

Bean的建立

由BeanFactory读取Bean定义文件,并生成各个实例。

Setter注入

执行Bean的属性依赖注入。

BeanNameAware的setBeanName()

如果Bean类实现了org.springframework.beans.factory.BeanNameAware接口,则执行其setBeanName()方法。

BeanFactoryAware的setBeanFactory()

如果Bean类实现了org.springframework.beans.factory.BeanFactoryAware接口,则执行其setBeanFactory()方法。

BeanPostProcessors的processBeforeInitialization()

容器中如果有实现org.springframework.beans.factory.BeanPostProcessors接口的实例,则任何Bean在初始化之前都会执行这个实例的processBeforeInitialization()方法。

InitializingBean的afterPropertiesSet()

如果Bean类实现了org.springframework.beans.factory.InitializingBean接口,则执行其afterPropertiesSet()方法。

Bean定义文件中定义init-method

在Bean定义文件中使用“init-method”属性设定方法名称,如下:
<bean id="demoBean" class="com.yangsq.bean.DemoBean" init-method="initMethod">

.......

</bean>
这时会执行initMethod()方法,注意,这个方法是不带参数的。

BeanPostProcessors的processAfterInitialization()

容器中如果有实现org.springframework.beans.factory.BeanPostProcessors接口的实例,则任何Bean在初始化之前都会执行这个实例的processAfterInitialization()方法。

DisposableBean的destroy()

在容器关闭时,如果Bean类实现了org.springframework.beans.factory.DisposableBean接口,则执行它的destroy()方法。

Bean定义文件中定义destroy-method

在容器关闭时,可以在Bean定义文件中使用“destory-method”定义的方法
<bean id="demoBean" class="com.yangsq.bean.DemoBean" destory-method="destroyMethod">

.......

</bean>
这时会执行destroyMethod()方法,注意,这个方法是不带参数的。

以上就是BeanFactory维护的一个Bean的生命周期。下面这个图可能更直观一些:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: