Spring注解学习_生命周期1_初始化和销毁方法
Bean的生命周期:
bean创建、初始化、销毁
容器管理bean的生命周期:
我们可以自定义初始化和销毁方法:容器在bean进行到对应生命周期时调用我们自定义的初始化和销毁方法
构造(bean对象创建):
- 单实例:在容器启动时创建对象
- 多实例:在每次获取时创建对象
初始化:
- 对象创建好,并赋值好后,调用初始化方法
销毁:
- 单实例:容器关闭的时候
- 多实例:容器不会管理这个bean,容器不会去调用销毁方法,需自行手动调用
¶两种初始化和销毁的方式
¶一、@Bean注解中指定初始化和销毁方法
即指定init-method和destroy-method。若想指定初始化和销毁方法,在用@Bean注解去注册Bean时,需要标明该bean的initMethod和destroyMethod。
新建Bean对象:Car
public class Car {
public Car(){
System.out.println("car constructor...");
}
public void init(){
System.out.println("car init");
}
public void destroy(){
System.out.println("destroy...");
}
}
新建配置类:MainConfig3,注册bean,指定其初始化和销毁方法
@Configuration
public class MainConfig3 {
@Bean(initMethod = "init",destroyMethod = "destroy")
public Car car(){
return new Car();
}
}
新建测试类:
public class IOCTest_LifeCycle {
@Test
public void test1(){
AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext(MainConfig3.class);
System.out.println("容器创建完成");
context.close(); //关闭容器时才会调用销毁方法
}
}
执行结果:
¶二、让Bean去实现InitializingBean接口和DisposableBean接口
InitializingBean:实现afterPropertiesSet()方法,定义初始化逻辑
DisposableBean:实现destroy()方法,定义销毁逻辑
新建Bean对象:Cat,实现InitializingBean,DisposibleBean
public class Cat implements InitializingBean, DisposableBean {
public Cat(){
System.out.println("cat constructor...");
}
@Override
public void destroy() throws Exception {
System.out.println("cat:destroy...");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("cat:after properties set...");
}
}
注册这个Bean:
@Configuration
@ComponentScan("com.study.bean")
public class MainConfig3 {
@Bean(initMethod = "init",destroyMethod = "destroy")
public Car car(){
return new Car();
}
@Bean
public Cat cat(){ //这次新注册的Bean
return new Cat();
}
}
测试一下:
public class IOCTest_LifeCycle {
@Test
public void test1(){
AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext(MainConfig3.class);
System.out.println("容器创建完成");
context.close();
}
}
¶三、用@PostConstruct和@PreDestroy来标明初始化和销毁方法
JSR250所提供的两个注解,直接看它的注释:
The PostConstruct annotation is used on a method that needs to be executed after dependency injection is done to perform any initialization.(PostConstruct注释用于需要在依赖项注入完成后执行的方法,以便执行任何初始化。)
The PreDestroy annotation is used on methods as a callback notification to signal that the instance is in the process of being removed by the container.(PreDestroy注释用于方法上,作为一个回调通知,通知该实例正在被容器删除的过程中。)
- @PostConstructor:在bean创建并赋值完成后,执行被标注的方法进行初始化
- @PreDestroy:在容器销毁bean之前,执行被标注方法
新建Bean:Dog
public class Dog {
public Dog(){
System.out.println("dog constructor...");
}
//对象创建并赋值之后调用
@PostConstruct
public void init(){
System.out.println("dog @PostConstruct...");
}
//容器销毁对象之前调用
@PreDestroy
public void destroy(){
System.out.println("dog @PreDestroy...");
}
}
同上,在配置类中注册Bean,或给Dog打上@Component直接在配置类扫描组件,不做赘述。直接看测试结果:
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达,邮件至 708801794@qq.com
文章标题:Spring注解学习_生命周期1_初始化和销毁方法
文章字数:791
本文作者:梅罢葛
发布时间:2020-03-30, 00:23:45
最后更新:2020-03-30, 01:50:47
原始链接:https://qiurungeng.github.io/2020/03/30/Spring%E6%B3%A8%E8%A7%A3%E5%AD%A6%E4%B9%A0-%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F1-%E5%88%9D%E5%A7%8B%E5%8C%96%E5%92%8C%E9%94%80%E6%AF%81%E6%96%B9%E6%B3%95/