`

Spring的生命周期

阅读更多

Spring的生命周期.

 转自:http://mislay.iteye.com/blog/364698

1.       容器启动,实例化所有实现了BeanFactoyPostProcessor接口的类。他会在任何普通Bean实例化之前加载.

2.       实例化剩下的Bean,对这些Bean进行依赖注入。

3.       如果Bean有实现BeanNameAware的接口那么对这些Bean进行调用

4.       如果Bean有实现BeanFactoryAware接口的那么对这些Bean进行调用

5.       如果Bean有实现ApplicationContextAware接口的那么对这些Bean进行调用

6.       如果配置有实现BeanPostProcessorBean,那么调用它的postProcessBeforeInitialization方法

7.       如果Bean有实现InitializingBean接口那么对这些Bean进行调用

8.       如果Bean配置有init属性,那么调用它属性中设置的方法

9.       如果配置有实现BeanPostProcessorBean,那么调用它的postProcessAfterInitialization方法

10.   Bean正常是使用

11.   调用DisposableBean接口的destory方法

12.   调用Bean定义的destory方法

 

如果从大体上区分值分只为四个阶段

1.       BeanFactoyPostProcessor实例化

2.       Bean实例化,然后通过某些BeanFactoyPostProcessor来进行依赖注入

3.       BeanPostProcessor的调用.Spring内置的BeanPostProcessor负责调用Bean实现的接口: BeanNameAware, BeanFactoryAware, ApplicationContextAware等等,等这些内置的BeanPostProcessor调用完后才会调用自己配置的BeanPostProcessor

4.       Bean销毁阶段

 

 

以上是自己总结的,没研究过源码,恐有误作参考用

以下附上验证的代码:

 

Java代码  收藏代码
  1. package mislay;  
  2.   
  3. import org.springframework.beans.BeansException;  
  4. import org.springframework.beans.factory.config.BeanFactoryPostProcessor;  
  5. import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;  
  6.   
  7. public class BeanFactoryPostProcessorTest implements BeanFactoryPostProcessor {  
  8.   
  9.     @Override  
  10.     public void postProcessBeanFactory(  
  11.             ConfigurableListableBeanFactory beanFactory) throws BeansException {  
  12.         System.out.println("--------> begin BeanFactoryPostProcessorTest");  
  13.         String[] names = beanFactory.getBeanDefinitionNames();  
  14.         for (String name : names) {  
  15.             System.out.println("definition bean name:" + name);  
  16.         }  
  17.         System.out.println("<--------- end BeanFactoryPostProcessorTest");  
  18.     }  
  19.   
  20. }  

 

Java代码  收藏代码
  1. package mislay;  
  2.   
  3. import org.springframework.beans.BeansException;  
  4. import org.springframework.beans.factory.config.BeanPostProcessor;  
  5.   
  6. public class BeanPostProcessorTest implements BeanPostProcessor {  
  7.   
  8.       
  9.     @Override  
  10.     public Object postProcessAfterInitialization(Object bean, String beanName)  
  11.             throws BeansException {  
  12.         System.out.println("call BeanPostProcessor interface postProcessAfterInitialization method; :" + beanName);  
  13.         return bean;  
  14.     }  
  15.   
  16.     @Override  
  17.     public Object postProcessBeforeInitialization(Object bean, String beanName)  
  18.             throws BeansException {  
  19.         System.out.println("call BeanPostProcessor interface postProcessBeforeInitialization method ::" + beanName);  
  20.         if(bean instanceof BeanTest) {  
  21.             System.out.println("bean instanceof BeanTest");  
  22.         }  
  23.         return bean;  
  24.     }  
  25.   
  26. }  

 

Java代码  收藏代码
  1. package mislay;  
  2.   
  3. import org.springframework.beans.BeansException;  
  4. import org.springframework.beans.factory.BeanFactory;  
  5. import org.springframework.beans.factory.BeanFactoryAware;  
  6. import org.springframework.beans.factory.BeanNameAware;  
  7. import org.springframework.beans.factory.DisposableBean;  
  8. import org.springframework.beans.factory.InitializingBean;  
  9. import org.springframework.beans.factory.config.BeanPostProcessor;  
  10. import org.springframework.context.ApplicationContext;  
  11. import org.springframework.context.ApplicationContextAware;  
  12.   
  13. public class BeanTest implements InitializingBean, DisposableBean,BeanNameAware,BeanFactoryAware,ApplicationContextAware {  
  14.   
  15.     @Override  
  16.     public void afterPropertiesSet() throws Exception {  
  17.         System.out.println("call InitializingBean interface");  
  18.           
  19.     }  
  20.   
  21.     @Override  
  22.     public void destroy() throws Exception {  
  23.         // TODO Auto-generated method stub  
  24.         System.out.println("call DisposableBean interface");  
  25.     }  
  26.   
  27.     public void _init() {  
  28.         System.out.println("call bean init method");  
  29.     }  
  30.       
  31.     public void _destory() {  
  32.         System.out.println("call bean destory method");  
  33.     }  
  34.       
  35.     public void setSomething(Object something) {  
  36.         System.out.println("DI call setSomething method");  
  37.     }  
  38.       
  39.     public BeanTest() {  
  40.         System.out.println("BeanTest create");  
  41.     }  
  42.   
  43.     @Override  
  44.     public void setBeanName(String name) {  
  45.         // TODO Auto-generated method stub  
  46.         System.out.println("call BeanNameAware interface name is:" + name);  
  47.     }  
  48.   
  49.     @Override  
  50.     public void setBeanFactory(BeanFactory beanFactory) throws BeansException {  
  51.         // TODO Auto-generated method stub  
  52.         System.out.println("call BeanFactoryAware interface");  
  53.     }  
  54.       
  55.       
  56.     @Override  
  57.     public void setApplicationContext(ApplicationContext applicationContext)  
  58.             throws BeansException {  
  59.         // TODO Auto-generated method stub  
  60.         System.out.println("call ApplicationContextAware interface");  
  61.     }  
  62.   
  63. }  

 

Java代码  收藏代码
  1. package mislay;  
  2.   
  3. import org.springframework.context.ApplicationContext;  
  4. import org.springframework.context.support.AbstractApplicationContext;  
  5. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  6.   
  7. public class Test {  
  8.   
  9.     public static void main(String[] args) {  
  10.         ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");  
  11.         ((AbstractApplicationContext) context).registerShutdownHook();  
  12.     }  
  13. }  

 

Java代码  收藏代码
  1. //下面是输出的内容  
  2.   
  3.   
  4. //这一段可以看出首先实例化化的BeanFactoryPostProcessor  
  5. --------> begin BeanFactoryPostProcessorTest  
  6. definition bean name:mislay.BeanFactoryPostProcessorTest  
  7. definition bean name:mislay.BeanPostProcessorTest  
  8. definition bean name:beanTest  
  9. <--------- end BeanFactoryPostProcessorTest  
  10.   
  11. //这一段是Bean的创建以及依赖注入  
  12. BeanTest create  
  13. DI call setSomething method  
  14.   
  15. //这一段就是内置的BeanPostProcessor调用  
  16. call BeanNameAware interface name is:beanTest  
  17. call BeanFactoryAware interface  
  18. call ApplicationContextAware interface  
  19.   
  20. //这里开始调用自己BeanPostProcessor  
  21. call BeanPostProcessor interface postProcessBeforeInitialization method ::beanTest  
  22. bean instanceof BeanTest  
  23. //穿插着对InitializingBean接口和定义的init方法的调用  
  24. call InitializingBean interface  
  25. call bean init method  
  26. call BeanPostProcessor interface postProcessAfterInitialization method; :beanTest  
  27. //上面就结束了对配置的BeanPostProcessor的调用  
  28.   
  29.   
  30. //最后销毁  
  31. call DisposableBean interface  
  32. call bean destory method 
分享到:
评论

相关推荐

    Spring生命周期.png

    spring的创建详解图片,仅供参考

    Spring生命周期.vsdx

    Spring生命周期.vsdx

    Spring bean生命周期demo

    在Spring框架中,Bean的生命周期是指从创建到销毁的整个过程。这个过程包含了初始化、正常使用以及最终的销毁几个阶段。了解并掌握Spring Bean的生命周期对于优化应用性能和资源管理至关重要。接下来,我们将深入...

    spring bean的生命周期

    Spring Bean的生命周期是Spring框架中的核心概念,它涵盖了Bean从创建到销毁的全过程。了解这一过程对于优化应用程序的性能和管理资源至关重要。在Spring中,Bean的生命周期主要分为以下几个阶段: 1. **初始化阶段...

    第二十章 Spring 应用上下文生命周期(ApplicationContext Lifecycle)1

    这一节可能包含了对Spring生命周期相关面试题的解析,帮助读者更好地理解和准备面试。 15. **结束语** 总结全文,强调Spring应用上下文生命周期的重要性以及理解其工作原理对于开发和维护Spring应用的意义。 ...

    spring-lifecycle:一个用于试验 spring 生命周期的小示例应用程序

    标题中的"spring-lifecycle"暗示了这个项目专注于探索Spring框架中bean的生命周期管理。让我们深入了解一下Spring框架的生命周期及其相关的知识点。 在Spring中,bean的生命周期是指从创建到销毁的整个过程,它包括...

    spring bean的生命周期测试代码

    在Spring框架中,Bean的生命周期管理是其核心特性之一,它允许开发者控制Bean从创建到销毁的整个过程。本资源提供了在Spring 4.2环境下关于Bean生命周期的测试代码,帮助我们深入理解这一关键概念。 首先,让我们...

    Spring Bean生命周期.pdf

    其中,Spring Bean生命周期的管理是Spring框架的核心功能之一,它涉及Spring容器如何创建、配置以及销毁Bean的整个过程。理解Spring Bean的生命周期对于开发高效和可维护的Java应用至关重要。 Spring Bean生命周期...

    详解Spring中Bean的生命周期和作用域及实现方式

    Spring中Bean的生命周期和作用域及实现方式 Spring是一个非常流行的Java应用程序框架,它提供了一个灵活的机制来管理Bean的生命周期和作用域。Bean的生命周期和作用域是Spring框架中两个非常重要的概念,它们决定了...

    spring bean life cycle

    在Spring框架中,Bean生命周期是核心概念之一,它涉及到Bean的创建、初始化、使用和销毁等阶段。了解和掌握Bean生命周期对于开发高质量的Spring应用至关重要。以下是对Spring Bean生命周期的详细解析。 首先,Bean...

    spring中service生命周期(xml/annotation)

    本文将探讨Spring中Service的生命周期,以及如何通过XML配置和注解来管理这些组件。 首先,Spring Service的生命周期通常包括实例化、初始化、正常运行、销毁四个阶段。在XML配置中,我们可以通过`&lt;bean&gt;`标签来...

    SpringBean的生命周期.mdj

    SpringBean的生命周期.mdj

    谈谈我对Spring Bean 生命周期的理解

    本文将详细介绍 Spring Bean 生命周期的概念、生命周期图、生命周期阶段、生命周期管理方式等相关知识点。 一、 Spring Bean 生命周期概述 Spring Bean 生命周期是指 Spring 容器中 Bean 的创建、初始化、销毁等...

    spring_in_action-sixth-edition.pdf

    Spring 生命周期是指 Spring 应用程序从启动到关闭的整个过程。Spring 生命周期包括应用程序的初始化、启动、运行和关闭等阶段。 11. Spring 配置 Spring 配置是指使用 Spring 框架的配置机制,帮助开发者快速构建...

    spring-hook-test.rar

    5. **Spring生命周期回调**:除了上述的`@PostConstruct`和`@PreDestroy`,Spring还提供了一些其他的生命周期回调,如`SmartLifecycle`接口,允许在应用启动和停止时控制Bean的启动和停止顺序。`@Application...

    Spring Bean 的生命周期

    本文主要介绍 Spring IoC 容器如何管理 Bean 的生命周期。 在应用开发中,常常需要执行一些特定的初始化工作,这些工作都是相对比较固定的,比如建立数据库连接,打开网络连接等,同时,在结束服务时,也有一些相对...

    架构师面试题系列之Spring面试专题及答案(41题).docx

    Spring 框架生命周期和 Bean 实例化过程 Spring 框架是一个非常流行的 Java Web 应用程序框架,它提供了一种灵活的方式来管理应用程序的生命周期。了解 Spring 的生命周期对于架构师和开发人员来说是非常重要的。 ...

Global site tag (gtag.js) - Google Analytics