spring学习----BeanFactory 博客分类: Spring springBeanFactory
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源代码注释中完全看出来:
/* <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中ApplicationContext.xml的Bean 博客分类: Spring SpringBeanFactoryApplicationContext
下一篇: Spring 博客分类: OpenSource--Spring Spring概述Spring示例Spring依赖注入Spring零配置Spring包简介
推荐阅读
-
Spring ApplicationContext 中的对象bean的生命周期 博客分类: Spring applicationcontextspringbeanbeanfactory
-
String之PropertyPlaceholderConfigurery源码解析 博客分类: spring PropertyPlaceholderConfigurery源码详解使用
-
Spring知识整理(三)—— BeanFactory 博客分类: Spring知识整理 SpringJ2EEJavaBeanFactorySSH
-
Spring 博客分类: OpenSource--Spring Spring概述Spring示例Spring依赖注入Spring零配置Spring包简介
-
spring的beanFactory和factoryBean 博客分类: Java beanFactoryfactoryBeanspringbean
-
spring学习----BeanFactory 博客分类: Spring springBeanFactory
-
获取Spring中ApplicationContext.xml的Bean 博客分类: Spring SpringBeanFactoryApplicationContext
-
Spring结构大概 博客分类: 源码 springBeanFactorygetBean
-
[Spring3.1]动态创建Spring bean 博客分类: Spring springbeanfactory
-
二、Spring源码分析——BeanFactory 博客分类: Spring Spring源码分析BeanFactory