除了自定义的destroy-method.还可以实现DisposableBean接口,来回调bean销毁时候执行的方法,这个接口有一个destroy方法,生命周期是是destroy----bean销毁---自定义的destroy方法
SimpleBean.java
package ch5.destroy;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
public class SimpleBean implements InitializingBean,DisposableBean {
public void afterPropertiesSet() throws Exception {
System.out.println("this is info from afterpropertiesSet from SimpleBean");
}
private String name;
private String sex;
private String age;
public void destroyMethod(){
System.out.println("this is info from customer destroy method");
}
public void destroy(){
System.out.println("this is info from destroy method");
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
public class SimpleBean implements InitializingBean,DisposableBean {
public void afterPropertiesSet() throws Exception {
System.out.println("this is info from afterpropertiesSet from SimpleBean");
}
private String name;
private String sex;
private String age;
public void destroyMethod(){
System.out.println("this is info from customer destroy method");
}
public void destroy(){
System.out.println("this is info from destroy method");
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="SimpleBean" class="ch5.destroy.SimpleBean" destroy-method="destroyMethod">
<property name="name">
<value>gaoxiang</value>
</property>
<property name="sex">
<value>male</value>
</property>
<property name="age">
<value>26</value>
</property>
</bean>
</beans>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="SimpleBean" class="ch5.destroy.SimpleBean" destroy-method="destroyMethod">
<property name="name">
<value>gaoxiang</value>
</property>
<property name="sex">
<value>male</value>
</property>
<property name="age">
<value>26</value>
</property>
</bean>
</beans>
测试代码:
package ch5.destroy;
import java.io.File;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.FileSystemResource;
public class TestSpring{
public static void main(String args[]) throws Exception{
//获取bean factory
ConfigurableListableBeanFactory factory=(ConfigurableListableBeanFactory)getBeanFactory(); //使用子beanFactory
SimpleBean bean1=(SimpleBean)factory.getBean("SimpleBean");
System.out.println("before destroy");
factory.destroySingletons();
System.out.println("after destory");
}
public static BeanFactory getBeanFactory(){
//获取bean factory
String realpath="";
//加载配置项
realpath=System.getProperty("user.dir")+File.separator+"src"+File.separator+"ch5/destroy"+File.separator+"applicationContext.xml";
ConfigurableListableBeanFactory factory=new XmlBeanFactory(new FileSystemResource(realpath));
return factory;
}
}
import java.io.File;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.FileSystemResource;
public class TestSpring{
public static void main(String args[]) throws Exception{
//获取bean factory
ConfigurableListableBeanFactory factory=(ConfigurableListableBeanFactory)getBeanFactory(); //使用子beanFactory
SimpleBean bean1=(SimpleBean)factory.getBean("SimpleBean");
System.out.println("before destroy");
factory.destroySingletons();
System.out.println("after destory");
}
public static BeanFactory getBeanFactory(){
//获取bean factory
String realpath="";
//加载配置项
realpath=System.getProperty("user.dir")+File.separator+"src"+File.separator+"ch5/destroy"+File.separator+"applicationContext.xml";
ConfigurableListableBeanFactory factory=new XmlBeanFactory(new FileSystemResource(realpath));
return factory;
}
}
结果:
this is info from afterpropertiesSet from SimpleBean
before destroy
this is info from destroy method
this is info from customer destroy method
after destory
http://blog.csdn.net/daryl715/article/details/1678986
相关推荐
下面将详细介绍如何通过不同方式定义Spring Bean的初始化和销毁回调方法。 **初始化回调方法** 1. **@PostConstruct注解** 这个Java标准注解用于标记一个方法,该方法将在对象完全构造后但在业务逻辑执行前被调用...
Spring 框架提供了两个接口,InitializingBean 和 DisposableBean,供用户实现以达到生命周期回调的目的。 * InitializingBean 接口:用于定义 ApplicationContext 在完全初始化一个 Bean 以后需要回调的方法的。在...
同样,Spring还提供了销毁回调机制,如`DisposableBean`接口的`destroy()`方法,或`@PreDestroy`注解的方法,以及`destroy-method`属性。这些在bean生命周期结束时调用。 通过理解并适当地应用这些回调机制,你...
Aware 接口是一种特殊的接口,用于提供 Bean 对象的生命周期事件回调。例如,可以使用 Aware 接口来执行 Bean 对象的初始化或销毁方法。 7. BeanPostProcessor 当经过上述几个步骤后,Bean 对象已经被正确构造 在 ...
Spring提供了多种生命周期接口,如`InitializingBean`和`DisposableBean`,以及自定义生命周期回调。这些接口包含`afterPropertiesSet()`和`destroy()`方法,分别对应初始化和销毁时的回调。当Bean实现了这些接口,...
当Spring容器关闭时,或者如果Bean声明了`destroy-method`,则会调用销毁回调方法。这是清理资源和执行关闭操作的最佳时机。同样,`DisposableBean`接口的`destroy()`方法也可以用于此目的。 9. **Bean的销毁** ...
3. **Bean接口回调**:如果Bean实现了特定的接口,如`BeanNameAware`、`BeanFactoryAware`或`ApplicationContextAware`,Spring会在适当的时候调用对应的回调方法。这些接口允许Bean获取其ID、BeanFactory引用或...
Spring Bean 的生命周期 ...> InitializingBean 和 DisposableBean 回调接口 > 针对特殊行为的其他 Aware 接口 > Bean 配置文件中的 Custom init()方法和 destroy()方法 > @PostConstruct 和@PreDestroy 注解方式
- **ApplicationContextAware**:此接口的`setApplicationContext`方法被Spring容器回调,将整个`ApplicationContext`传递给bean,使bean能够访问上下文中的所有bean。 4. **初始化回调方法** - **...
- **销毁回调**:如DisposableBean接口和自定义的destroy-method。 - **组合生命周期机制**:可以结合使用不同的生命周期机制来控制Bean的生命周期。 #### 自定义Bean的属性 Spring还支持自定义Bean的属性,包括...
销毁回调则是在Bean不再使用、即将被销毁时调用的方法,可通过实现DisposableBean接口或`destroy-method`属性设置。 此外,Spring 2.5引入了基于注解的配置,可以减少XML配置,提高代码可读性。通过`@Component`、`...
3. **初始化**:在属性注入完成后,Spring会执行Bean实现的初始化回调方法,这些方法可以通过实现`InitializingBean`接口的`afterPropertiesSet()`方法或者使用`init-method`属性来指定。此外,还可以通过配置`@...
- 销毁回调:在容器关闭时,调用`DisposableBean`接口的`destroy`方法或自定义的销毁方法。 掌握这些核心概念对于深入理解和使用Spring框架至关重要,它们有助于编写更高效、可维护的代码,并在面试中展示出扎实的...
3. **初始化**:在实例化和属性注入后,Spring调用Bean的初始化回调方法。这些方法可以通过以下方式定义: - `@PostConstruct`注解的方法:当容器调用该注解的方法时,表明Bean的初始化完成。 - `InitializingBean...
5. **Spring生命周期回调**:除了上述的`@PostConstruct`和`@PreDestroy`,Spring还提供了一些其他的生命周期回调,如`SmartLifecycle`接口,允许在应用启动和停止时控制Bean的启动和停止顺序。`@Application...
- Bean的生命周期过程包括实例化、属性赋值、BeanNameAware和BeanFactoryAware接口方法调用、BeanPostProcessor接口方法调用、InitializingBean和DisposableBean接口方法调用等。 5. Spring的属性注入: Spring...
总之,Spring管理的Bean生命周期包括创建、初始化、活跃使用和销毁四个主要阶段,通过各种回调方法、接口和注解,我们可以对Bean的行为进行自定义,以满足不同应用场景的需求。深入理解这些机制,有助于我们更好地...
对于Singleton Bean,Spring在容器关闭时会调用`@PreDestroy`注解的方法和实现DisposableBean接口的`destroy()`方法。对于Prototype作用域的Bean,Spring不会自动管理销毁,需要由用户负责。 在实际应用中,理解...
4. **初始化**:Spring会调用Bean的初始化回调方法,即带有@PostConstruct注解的方法或init-method指定的方法。 5. **注册Bean**:将创建好的Bean实例放入BeanFactory或ApplicationContext中,以便后续的查找和引用...
3. 初始化回调:当Bean实例化并注入属性后,Spring会调用`@PostConstruct`注解的方法,执行Bean的初始化逻辑。 4. AOP代理:如果Bean实现了接口,Spring默认使用JDK动态代理;如果没有接口,Spring会使用CGLIB代理...