@Bean指定初始化和销毁方法
@Bean中有initMethod和destroyMethod两个参数
- initMethod:初始化方法
- destroyMethod:销毁方法
使用
在Bean中写初始化方法、销毁方法
public class Person {
private void init(){
//初始化代码
System.out.println("init execute");
}
private void destroy(){
//销毁代码
System.out.println("destroy execute");
}
}
在@Bean中指定
@Configuration
public class ApplicationConfig {
/*
默认name是获取Bean的方法名 person
@Bean("person001") 这样使用注解 name则为person001
*/
@Bean(initMethod = "init", destroyMethod = "destroy")
public Person person() {
return new Person("小符", 18);
}
}
初始化容器
public class Application {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class);
}
}
可以看到初始化方法被执行了,那销毁方法呢?
加入容器关闭代码再次看输出内容
public class Application {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class);
context.close();
}
}
可以看到销毁方法也被执行了。
这里需要注意的是
1.默认单例Bean情况下,是容器初始化就回执行初始化方法,如果使用了@Lazy或者@Scope(“prototype”)初始化容器时Bean的初始化方法不会执行。
2.如果使用@Scope(“prototype”),容器close时不会执行Bean的destroy。需要自己手动调用destroy方法销毁。
@PostConstruct和@PreDestroy
@PostConstruct:使用了该注解的方式表示为初始化方法
@PreDestroy:容器删除实例时会通知回调该销毁方法
@PostConstruct和@PreDestroy和执行顺序都优先于上方所介绍的@Bean指定initMethod和destroyMethod。
使用
在Bean的初始化和销毁方法上加上对应注解
public class Person {
@PostConstruct
private void init(){
//初始化代码
System.out.println("init execute");
}
@PreDestroy
private void destroy(){
//销毁代码
System.out.println("destroy execute");
}
}
执行查看输出内容
public class Application {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class);
context.close();
}
}
InitializingBean和DisposableBean
InitializingBean:
接口中有afterPropertiesSet方法,此方法允许Bean实例对其整体执行验证设置所有bean属性后进行配置和最终初始化。设置bean所有属性后执行。
DisposableBean:
接口中有destroy方法,销毁对象时调用。
使用
在Bean中实现InitializingBean和DisposableBean接口
public class Person implements InitializingBean, DisposableBean {
//销毁对象时调用
public void destroy() throws Exception {
System.out.println("InitializingBean");
}
/*
此方法允许Bean实例对其整体执行验证设置所有bean属性后进行配置和最终初始化。
*/
// 设置bean所有属性后执行
public void afterPropertiesSet() throws Exception {
System.out.println("DisposableBean");
}
}
查看输出
public class Application {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class);
context.close();
}
}
执行先后顺序
当三者都是用的情况下执行先后顺序
优先级:
@PostConstruct、@PreDestroy > InitializingBean、DisposableBean > @Bean(initMethod,destroyMethod)
来源:CSDN
作者:Fred-X
链接:https://blog.csdn.net/weixin_43950568/article/details/104224884