spring BeanFactory学习

文章来自于:http://jijun87120681.iteye.com/blog/1397377

 

Spring的IOC容器就是一个实现了BeanFactory接口的可实例化类。

    BeanFactory从名字上都可以看出,采用了工厂模式。应用程序将Bean的创建交给Beanfactory,然后从BeanFactory获取Bean并使用它们,流程图如下:


 

Bean初始化流程:

(1)容器根据XML配置文件中Bean的定义实例化一个Bean,并传入必要的构造方法参数。

(2)容器根据XML配置文件使用设置Bean的属性

(3)如果Bean实现了BeanNameAware接口,调用其setBeanName()方法

(4)如果Bean实现了BeanClassLoaderAware接口,调用其setBeanClassLoader()方法

(5)如果Bean实现了BeanFactoryAware接口,调用其setBeanFactory()方法

(6)如果使用ApplicationContext并且Bean实现了ResourceLoaderAware接口,调用其setResourceLoader()方法

(7)如果使用ApplicationContext并且Bean实现了ApplicationEventPublisherAware接口,调用其setApplicationEventPublisher()方法

(8)如果使用ApplicationContext并且Bean实现了MessageSourceAware接口,调用其setMessageSource()方法

(9)如果使用ApplicationContext并且Bean实现了ApplicationContextAware接口,调用其setApplicationContext()方法

(10)如果使用WebApplicationContext并且Bean实现了ServletContextAware接口,调用其setServletContext()方法,仅对Web应用程序有效

(11)如果关联了BeanPostProcessor,调用BeanPostProcessor的postProcessBeforeInitialization()方法

(12)如果实现了InitializingBean接口,调用其afterPropertiesSet()方法执行一些初始化工作

(13)如果Bean定义了init-method方法,调用这个方法执行一些初始化工作

(14)如果关联了BeanPostProcessor,调用BeanPostProcessor的postProcessAfterInitialization()方法

执行完上述步骤,Bean就处于就绪状态,可以从spring容器中获取了

 

Bean的销毁流程:

(1)如果Bean实现了DisposableBean接口,调用其destroy()方法执行资源清理等工作

(2)如果Bean定义了destroy-method方法,调用这个方法执行资源清理等工作

 

Bean的流程可以从BeanFactory源代码注释中完全看出来:

 

 

Java代码   收藏代码
  1. /* <p>Bean factory implementations should support the standard bean lifecycle interfaces  
  2.  * as far as possible. The full set of initialization methods and their standard order is:<br>  
  3.  * 1. BeanNameAware's <code>setBeanName</code><br>  
  4.  * 2. BeanClassLoaderAware's <code>setBeanClassLoader</code><br>  
  5.  * 3. BeanFactoryAware's <code>setBeanFactory</code><br>  
  6.  * 4. ResourceLoaderAware's <code>setResourceLoader</code>  
  7.  * (only applicable when running in an application context)<br>  
  8.  * 5. ApplicationEventPublisherAware's <code>setApplicationEventPublisher</code>  
  9.  * (only applicable when running in an application context)<br>  
  10.  * 6. MessageSourceAware's <code>setMessageSource</code>  
  11.  * (only applicable when running in an application context)<br>  
  12.  * 7. ApplicationContextAware's <code>setApplicationContext</code>  
  13.  * (only applicable when running in an application context)<br>  
  14.  * 8. ServletContextAware's <code>setServletContext</code>  
  15.  * (only applicable when running in a web application context)<br>  
  16.  * 9. <code>postProcessBeforeInitialization</code> methods of BeanPostProcessors<br>  
  17.  * 10. InitializingBean's <code>afterPropertiesSet</code><br>  
  18.  * 11. a custom init-method definition<br>  
  19.  * 12. <code>postProcessAfterInitialization</code> methods of BeanPostProcessors  
  20.  *  
  21.  * <p>On shutdown of a bean factory, the following lifecycle methods apply:<br>  
  22.  * 1. DisposableBean's <code>destroy</code><br>  
  23.  * 2. a custom destroy-method definition  
  24.  *  
  25.  */   
  26. public   interface  BeanFactory {...}  
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值