bean的生命周期指的是bean的创建——>初始化——>销毁的过程,该过程是由spring容器进行管理的
我们可以自定义bean初始化和销毁的方法:容器在bean进行到当前生命周期时,调用自定义的初始化和销毁方法
自定义初始化和销毁方法:
配置文件的bean标签中配置init-method、destroy-method属性
<bean id="user" class="com.enjoy.study.pojo.User" init-method="init" destroy-method="destroy"/>
bean类
public class User {
public User() {
System.out.println("user....constructor..........");
}
public void init(){
System.out.println("user....init..........");
}
public void destroy(){
System.out.println("user....destroy..........");
}
}
测试类
public class Cap7Test {
@Test
public void cap7Test(){
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:beans.xml");
System.out.println("ioc容器启动完成");
context.close();
}
}
结果
user....constructor..........
user....init..........
ioc容器启动完成
user....destroy..........
@Bean配置initMethod、destroyMethod属性
单实例情况:
@Configuration
public class Cap7MainConfig {
@Bean(initMethod = "init",destroyMethod = "destroy")
public User user(){
return new User();
}
}
测试方法
@Test
public void annoTest(){
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Cap7MainConfig.class);
System.out.println("ioc容器启动完成");
context.close();
}
结果
user....constructor..........
user....init..........
ioc容器启动完成
user....destroy..........
多实例情况:
@Configuration
public class Cap7MainConfig {
@Scope("prototype")
@Bean(initMethod = "init",destroyMethod = "destroy")
public User user(){
return new User();
}
}
结果
ioc容器启动完成
单实例情况下,容器启动时完成bean的实例化,容器关闭时进行bean的销毁
多实例情况下,容器启动时不进行bean的实例化,获取bean时实例化bean对象,所以启动后直接关闭容器,容器中并未进行bean的管理
bean实现InitializingBean接口,实现afterPropertiesSet()方法:beanFactory创建对象完成,并且设置完属性后,调用该方法,相当于初始化方法
bean实现DisposableBean接口,实现destroy()方法:bean对象销毁时,调用该方法
原文:https://www.cnblogs.com/qf123/p/10901308.html