细小知识点之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”属性设定方法名称,如下:
这时会执行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”定义的方法
这时会执行destroyMethod()方法,注意,这个方法是不带参数的。
以上就是BeanFactory维护的一个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> |
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> |
以上就是BeanFactory维护的一个Bean的生命周期。下面这个图可能更直观一些:
相关文章推荐
- eclipse的快捷键--收藏
- 为什么java局部变量没有初始化就会报错,而成员变量没有初始化就不会报错?
- eclipse中启动项目报内存溢出问题通过修改配置解决
- Java构造函数链
- java 二叉树的实现与先序遍历和层次遍历
- java获取动态代理的target目标
- 黑马程序员_Java基础:JDK1.5后的新特性:自动拆装箱,以及注意事项
- 在eclipse中创建android工程
- java web 开发(二)
- Spring4的IoC和DI的区别
- 回调函数透彻理解Java
- JAVA代码获取月份的第一天跟最后一天
- eclipse中不能找到dubbo.xsd解决方法
- 使用Eclipse_Memory_Analyzer进行内存泄漏分析三部曲
- JDk Set及HashSet源码解析
- Java获取客户端IP
- Java回调函数
- ibatis+struts+spring配置和登录实现
- 斐波那契数Fibonacci,Java编程思想第四章练习9答案
- java 窗体