`

Spring容器中的Bean几种初始化方法和销毁方法的先后顺序

阅读更多

Spring容器中的Bean是有生命周期,Spring 允许 Bean 在初始化完成后以及销毁前执行特定的操作。下面是常用的三种指定特定操作的方法:

  • 通过实现InitializingBean/DisposableBean 接口来定制初始化之后/销毁之前的操作方法;
  • 通过<bean> 元素的 init-method/destroy-method属性指定初始化之后 /销毁之前调用的操作方法;
  • 在指定方法上加上@PostConstruct或@PreDestroy注解来制定该方法是在初始化之后还是销毁之前调用。

xml配置

<bean id="myInitializingBean" class="com.sf.sfbuy2.context.filter.MyInitializingBean">
</bean>
<bean id="myXmlBean" class="com.sf.sfbuy2.context.filter.MyXmlBean" init-method="initMethod" destroy-method="destroyMethod"></bean>
<bean id="myAnnoationBean" class="com.sf.sfbuy2.context.filter.MyAnnoationBean"></bean>

 方法一

import javax.annotation.PreDestroy;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MyInitializingBean implements InitializingBean,DisposableBean{
		  
	public MyInitializingBean(){  
		System.out.println("执行InitAndDestroySeqBean: 构造方法");  
	}  
	
	@Override  
	public void afterPropertiesSet() throws Exception {  
		System.out.println("执行InitAndDestroySeqBean: afterPropertiesSet");   
	}  
	
	
	@PreDestroy
	public void preDestroy()  {  
		System.out.println("执行InitAndDestroySeqBean: preDestroy");  
	}  
	
	@Override  
	public void destroy() throws Exception {  
		System.out.println("执行InitAndDestroySeqBean: destroy");  
	}  
	
	public static void main(String[] args) {  
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");  
		context.close();  
	}  
}

 方法二、

public class MyXmlBean{
		  
	public MyXmlBean(){  
		System.out.println("执行MyXmlBean: 构造方法");  
	}  
	public void initMethod() {  
		System.out.println("执行MyXmlBean: init-method");  
	} 
	public void destroyMethod() {  
		System.out.println("执行MyXmlBean: destroy-method");  
	}  
	
	public static void main(String[] args) {  
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");  
		context.close();  
	}  
}

 方法三、

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MyAnnoationBean{
		  
	public MyAnnoationBean(){  
		System.out.println("执行myAnnoationBean: 构造方法");  
	}  	
	@PostConstruct
	public void postConstructMethod() {  
		System.out.println("执行myAnnoationBean: postConstructMethod初始化方法");  
	} 
	
	@PreDestroy
	public void preDestroyMethod() {  
		System.out.println("执行myAnnoationBean: destroy-method销毁方法");  
	}  
	
	public static void main(String[] args) {  
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");  
		context.close();  
	}  
}

Bean在实例化的过程中:Constructor > @PostConstruct >InitializingBean > init-method

Bean在销毁的过程中:@PreDestroy > DisposableBean > destroy-method

分享到:
评论

相关推荐

    spring容器初始化bean和销毁bean之前进行一些操作的方法

    此外,Spring提供了BeanPostProcessor接口,允许我们在Bean初始化前后进行自定义处理。通过实现`postProcessBeforeInitialization()`和`postProcessAfterInitialization()`方法,可以在Bean实例化和初始化之后进行...

    Spring Bean创建初始化流程.docx

    9. **Bean初始化**: 最后,`initializeBean(beanName, exposedObject, mbd)`对创建好的Bean进行初始化,包括调用初始化方法(如果有`@PostConstruct`注解的方法),以及执行AOP代理等操作。 整个流程中,Spring...

    Spring Bean的初始化和销毁实例详解

    在Spring框架中,我们可以使用多种方式来控制Bean的初始化和销毁,以下就Spring Bean的初始化和销毁进行详细的讲解。 一、Bean的初始化 在Spring框架中,我们可以使用多种方式来初始化Bean,下面我们将介绍两种...

    Spring实例化Bean顺序

    在Spring框架中,Bean的实例化顺序是一个关键概念,它...在实际开发中,应谨慎处理Bean的实例化顺序,以避免不必要的初始化问题和依赖循环。通过合理利用Spring提供的工具和机制,可以更好地控制和管理Bean的生命周期。

    Spring bean初始化及销毁你必须要掌握的回调方法.docx

    下面将详细介绍如何通过不同方式定义Spring Bean的初始化和销毁回调方法。 **初始化回调方法** 1. **@PostConstruct注解** 这个Java标准注解用于标记一个方法,该方法将在对象完全构造后但在业务逻辑执行前被调用...

    深度解析spring容器管理bean

    Spring容器还提供了多种管理Bean生命周期的方法,包括初始化回调、销毁回调、以及作用域(singleton、prototype等)。初始化回调是指在Bean实例化后、开始使用前执行的方法,可以通过`init-method`属性指定。销毁回...

    Spring框架中Bean的生命周期 Spring中Bean有几种作用域

    在Spring框架中,Bean的生命周期管理和作用域是其核心特性之一,它们对于理解Spring如何管理对象的创建、初始化、使用以及销毁至关重要。首先,我们来深入探讨Bean的生命周期。 Spring中的Bean生命周期主要分为两个...

    Spring Bean 加载顺序 .

    7. **Bean初始化**: 实例化完成后,Spring会执行Bean的初始化方法,包括调用`@PostConstruct`注解的方法。同时,如果Bean实现了InitializingBean接口,其`afterPropertiesSet()`方法也会被调用。 8. **初始化后...

    spring的bean加载顺序样例项目

    在Spring框架中,Bean的加载顺序是一个重要的概念,它涉及到Spring容器如何管理和初始化Bean的过程。在"spring的bean加载顺序样例项目"中,我们可以通过分析和实验来深入理解这一主题。下面将详细阐述Spring Bean的...

    Spring之核心容器bean

    在Spring中,bean是一个由容器管理的对象,它的实例化、初始化、装配和销毁都是由Spring容器控制的。你可以通过XML、注解或者Java配置类来定义bean。例如,一个简单的XML配置如下: ```xml &lt;bean id="myBean" class...

    spring中的bean

    在Spring中,Bean通常代表应用程序中的一个对象,这些对象由Spring容器(ApplicationContext)管理,包括创建、初始化、装配和销毁。Bean可以通过XML配置文件、注解或者Java配置类进行定义。 1. **Bean的定义**:在...

    spring bean的生命周期

    - **初始化回调**:Spring支持两种类型的初始化回调方法,即`@PostConstruct`注解的方法和在XML中定义的`init-method`属性指定的方法。 2. **容器管理的生命周期回调** - **Singleton Beans的懒加载**:如果Bean...

    spring bean life cycle

    通过实现`postProcessBeforeInitialization()`和`postProcessAfterInitialization()`方法,可以在Bean初始化前后进行额外的操作。 在Spring容器中,Bean的生命周期管理也支持通过`BeanDefinition`进行定制。例如,...

    spring bean XML配置入门

    我们还可以在XML配置中定义Bean的初始化方法(`init-method`)和销毁方法(`destroy-method`),Spring容器会在适当的时间调用这些方法。 9. **Spring容器的启动与Bean的生命周期**: 一旦XML配置加载到Spring...

    Spring 源码分析(Bean的初始化)

    总结起来,Spring的Bean初始化是一个复杂而精细的过程,涉及XML解析、BeanDefinition的构建、依赖注入、初始化回调、AOP代理等多个环节。通过深入理解这一过程,开发者能更好地掌握Spring框架的工作原理,从而更高效...

    Spring Bean生命周期.pdf

    - InitializingBean:对应初始化阶段,它提供了afterPropertiesSet方法供开发者实现Bean初始化逻辑。 - DisposableBean:对应销毁阶段,它提供了destroy方法供开发者实现Bean销毁逻辑。 整个Spring Bean的生命...

    Spring中与Bean相关的接口

    它提供两个方法:`postProcessBeforeInitialization()`和`postProcessAfterInitialization()`,分别在Bean初始化之前和之后调用,可以用来进行额外的处理或校验。 在Bean的定义中,我们可以使用`@Component`、`@...

    Spring初始化和销毁的实现方法

    "Spring初始化和销毁的实现方法" Spring框架中,Bean的初始化和销毁是非常重要的两个生命...Spring 中提供了多种实现 Bean 初始化和销毁的方法,开发者可以根据实际情况选择合适的方法来实现 Bean 的生命周期管理。

    Spring管理的Bean的生命周期

    2. **BeanPostProcessor接口**:实现这个接口的类可以定义两个方法`postProcessBeforeInitialization()`和`postProcessAfterInitialization()`,分别在Bean初始化前和后进行处理。 3. **@PostConstruct注解**:在...

    Spring中Bean的生命周期 applicationcontext的应用(实现国际化,事件的传递)

    5. **销毁回调**:当Spring容器关闭时,或Bean定义中设置了`destroy-method`,Spring会调用Bean的销毁方法。同样,实现`DisposableBean`接口的Bean会调用`destroy()`方法。 接下来,我们看看ApplicationContext的...

Global site tag (gtag.js) - Google Analytics