在传统的Java应用中,Bean的生命周期非常简单。Java的关键词new用来实例化Bean(或许他是非序列化的)。这样就够用了。相反,Bean 的生命周期在Spring容器中更加细致。理解Spring Bean的生命周期非常重要,因为你或许要利用Spring提供的机会来订制Bean的创建过程。
1. 容器寻找Bean的定义信息并且将其实例化。
2.受用依赖注入,Spring按照Bean定义信息配置Bean的所有属性。
3.如果Bean实现了BeanNameAware接口,工厂调用Bean的setBeanName()方法传递Bean的ID。
4.如果Bean实现了BeanFactoryAware接口,工厂调用setBeanFactory()方法传入工厂自身。
5.如果BeanPostProcessor和Bean关联,那么它们的postProcessBeforeInitialzation()方法将被调用。
6.如果Bean指定了init-method方法,它将被调用。
7.最后,如果有BeanPsotProcessor和Bean关联,那么它们的postProcessAfterInitialization()方法将被调用。
到这个时候,Bean已经可以被应用系统使用了,并且将被保留在Bean Factory中知道它不再需要。有两种方法可以把它从Bean Factory中删除掉。
1.如果Bean实现了DisposableBean接口,destory()方法被调用。
2.如果指定了订制的销毁方法,就调用这个方法。
Bean在Spring应用上下文的生命周期与在Bean工厂中的生命周期只有一点不同,唯一不同的是,如果Bean实现了ApplicationContextAwre接口,setApplicationContext()方法被调用。
举例:(这里只是演示Bean工厂的例子)
我这里用的是spring-1.2.6,由于版本原因吧,这里演示的不是很好!
1.HelloWorld.java
package com.spring.lifecycle; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; import org.springframework.beans.factory.BeanNameAware; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.config.BeanPostProcessor; public class HelloWorld implements BeanNameAware,BeanFactoryAware, BeanPostProcessor,InitializingBean,DisposableBean{ private String hello; public void setBeanName(String arg0) { System.out.println("调用BeanNameAware的setBeanName()..." ); } public String getHello() { return hello; } public void setHello(String hello) { this.hello = hello; System.out.println("调用setHello()..." ); } public void customInit() { System.out.println("调用customInit()..."); } public void customDestroy() { System.out.println("调用customDestroy()..."); } public Object postProcessAfterInitialization(Object arg0, String arg1) throws BeansException { System.out.println("调用BeanPostProcessor的postProcessAfterInitialization()..."); return null; } public Object postProcessBeforeInitialization(Object arg0, String arg1) throws BeansException { System.out.println("调用BeanPostProcessor的postProcessBeforeInitialization()..."); return null; } public void destroy() throws Exception { System.out.println("调用DisposableBean的destory()..."); } public void afterPropertiesSet() throws Exception { System.out.println("调用InitializingBean的afterPropertiesSet()..."); } public void setBeanFactory(BeanFactory arg0) throws BeansException { System.out.println("调用BeanFactoryAware的setBeanFactory()..."); } }
2.测试程序
package com.spring.springtest; import junit.framework.TestCase; import org.springframework.beans.factory.BeanFactory; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.spring.lifecycle.HelloWorld; public class TestLifeCycle extends TestCase { private BeanFactory bf; protected void setUp() throws Exception { bf = new ClassPathXmlApplicationContext("applicationContext.xml"); } public void testLifeCycle() throws Exception { HelloWorld hello = (HelloWorld) bf.getBean("helloWorld"); assertEquals("hello world!", hello.getHello()); hello.destroy(); } }
3.applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="helloWorld" class="com.spring.lifecycle.HelloWorld" init-method="customInit" destroy-method="customDestroy"> <property name="hello" value="hello world!"></property> </bean> </beans>
4.运行结果:
调用BeanNameAware的setBeanName()...
调用BeanFactoryAware的setBeanFactory()...
调用InitializingBean的afterPropertiesSet()...
调用customInit()...
调用DisposableBean的destory()...
相关推荐
- **XML配置**:在传统的Spring应用中,Bean的定义通常写在XML配置文件中,如`springbean-xml`中的配置。 - **注解配置**:使用`@Component`,`@Service`,`@Repository`和`@Controller`注解标记类,配合`@...
在整个生命周期中,Spring提供了多种方式来实现Bean的初始化,例如使用init-method参数、InitializingBean接口等。 二、Bean的作用域 Bean的作用域是指Bean的生命周期和可用性。Spring框架提供了多种作用域,例如 ...
Spring 中 Bean 的生命周期回调方法是指在 Bean 的生命周期中, Spring 框架提供了多种方式来实现对 Bean 的生命周期的管理。这些回调方法可以在 Bean 的初始化、销毁等阶段被调用,从而实现对 Bean 的管理和资源的...
Bean生命周期的理解对于优化应用性能和理解Spring内部工作原理至关重要。这里我们将深入探讨Spring的Bean生命周期、容器周期以及工厂周期。 首先,让我们从Bean生命周期开始。在Spring中,Bean的生命周期包括以下几...
本资源提供了在Spring 4.2环境下关于Bean生命周期的测试代码,帮助我们深入理解这一关键概念。 首先,让我们了解Spring Bean的生命周期主要包含以下几个阶段: 1. **实例化**:Spring容器通过`Class`对象或`...
接下来,我们将深入探讨Spring Bean生命周期的各个阶段,并通过具体的示例来演示。 1. **配置阶段** 在Spring容器初始化时,它会读取配置文件(如XML或Java配置),解析Bean定义,包括其依赖关系、初始化方法、...
SpringBean的生命周期.mdj
Spring Bean生命周期中的扩展接口主要包括: - 容器级扩展接口 - InstantiationAwareBeanPostProcessor:这个接口允许在Bean实例化之前和之后以及属性赋值之后进行扩展。这使得它可以在Bean的生命周期中多个点进行...
Spring中的Bean生命周期主要分为两个阶段:容器管理阶段和用户自定义阶段。在容器管理阶段,Spring容器负责Bean的实例化、属性注入、初始化、使用和销毁。而在用户自定义阶段,开发者可以通过定义回调方法或使用特定...
在Spring框架中,Bean的生命周期管理和ApplicationContext的应用是两个核心概念,它们对于理解Spring如何管理和协调应用中的对象至关重要。本文将深入探讨这两个主题,并结合国际化(i18n)和事件传递来阐述它们在...
容器会在 Bean 的整个生命周期中执行不同的方法,包括实例化、设置属性、依赖注入、初始化、使用和销毁等阶段。 六、 小结 Spring Bean 生命周期是 Spring 框架中的一个核心概念,掌握 Spring Bean 生命周期可以...
本篇将详细阐述Spring Bean生命周期的各个阶段,以及如何记忆和深入理解这一过程。 首先,Spring Bean的生命周期可以分为两个主要阶段:容器初始化阶段和容器销毁阶段。 在容器初始化阶段,Spring Bean会经历以下...
Spring框架是Java应用开发中的一个核心组件,尤其在企业级应用中广泛使用。Spring通过其IoC(Inversion of Control,控制反转)容器管理Bean的生命周期,...理解Bean生命周期对于有效管理和优化Spring应用至关重要。
在Bean的生命周期中,还有一个非常重要的概念:Bean后置处理器。Bean后置处理器允许在调用初始化方法前后对Bean进行额外的处理。Bean后置处理器对IOC容器里的所有Bean实例逐一处理,而非单一实例。其典型应用是:...
Spring 的 Bean 生命周期,11 张高清流程图及代码,深度解析
这两个后处理器接口提供了灵活的扩展点,允许开发者在Bean生命周期的关键点进行自定义操作。 ApplicationContext是BeanFactory的升级版,提供了更丰富的功能,包括事件发布、国际化等。在ApplicationContext中,...
在Spring的IoC(Inversion of Control)容器中,Bean的生命周期管理是非常重要的一部分。通过合理地控制Service的生命周期,可以确保应用程序的稳定性和资源的有效利用。无论是XML配置还是注解方式,Spring都提供了...
在Spring框架中,Bean生命周期是核心概念之一,它涉及到Bean的创建、初始化、使用和销毁等阶段。了解和掌握Bean生命周期对于开发高质量的Spring应用至关重要。以下是对Spring Bean生命周期的详细解析。 首先,Bean...
一般情况下,我们只是关心如何正确地将Bean装配到容器中,并不关心Ioc容器是如何装配和销毁Bean的过程。但是恰恰有时候,我们需要自定义初始化或销毁Bean的过程,以满足一些“特殊的”需求。比如,数据源在关闭的...