欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

spring学习----BeanFactory 博客分类: Spring springBeanFactory 

程序员文章站 2024-02-06 11:52:34
...

 

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

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


spring学习----BeanFactory
            
    
    博客分类: Spring springBeanFactory 

 

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源代码注释中完全看出来:

 

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

 

  • spring学习----BeanFactory
            
    
    博客分类: Spring springBeanFactory 
  • 大小: 58.9 KB
相关标签: spring BeanFactory