内容简介:在实际开发中经常会遇到在spring容器加载完某个bean之后,需要执行一些业务代码的场景。比如初始化配置、缓存等。有以下几种方式可以实现此需求(欢迎补充)实现ApplicationListener接口并实现方法onApplicationEvent()方法,Bean在创建完成后会执行onApplicationEvent方法实现InitializingBean接口并实现方法afterPropertiesSet(),Bean在创建完成后会执行afterPropertiesSet()方法
在实际开发中经常会遇到在spring容器加载完某个bean之后,需要执行一些业务代码的场景。比如初始化配置、缓存等。有以下几种方式可以实现此需求(欢迎补充)
实现ApplicationListener接口
实现ApplicationListener接口并实现方法onApplicationEvent()方法,Bean在创建完成后会执行onApplicationEvent方法
@Component
public class DoByApplicationListener implements ApplicationListener<ContextRefreshedEvent> {
public DoByApplicationListener() {
System.out.println("DoByApplicationListener constructor");
}
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
if (event.getApplicationContext().getParent() == null) {
System.out.println("DoByApplicationListener do something");
}
}
}
实现InitializingBean接口
实现InitializingBean接口并实现方法afterPropertiesSet(),Bean在创建完成后会执行afterPropertiesSet()方法
@Component
public class DoByInitializingBean implements InitializingBean {
public DoByInitializingBean() {
System.out.println("DoByInitializingBean constructor");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("InitByInitializingBean do something");
}
}
使用@PostConstruct注解
在Bean的某个方法上使用@PostConstruct注解,Bean在创建完成后会执行该方法
@Component
public class DoByPostConstructAnnotation {
public DoByPostConstructAnnotation() {
System.out.println("DoByPostConstructAnnotation constructor");
}
@PostConstruct
public void init(){
System.out.println("InitByPostConstructAnnotation do something");
}
}
使用init-method
使用init-metod可以指定Bean在创建完成后,初始化使用的方法,比如有个Bike类
public class Bike {
public Bike() {
System.out.println("Bike constructor");
}
public void initBike() {
System.out.println("Bike do something");
}
}
使用@Configuration注解来启动容器,并设置Bike的初始化方法为initBike
@Configuration
public class DoByInitMethod {
@Bean(initMethod ="initBike")
public Bike bike() {
return new Bike();
}
}
以上方式和代码全部都测试运行过,绝对可用!
以上所述就是小编给大家介绍的《Spring中Bean创建完成后执行指定代码的几种实现方式》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- React Native --踩坑记 之 创建指定 React Native版本的项目
- c# – “SMTP主机未指定” – 但是是否指定?
- 运维安全 | 如何限制指定账户不能SSH只能SFTP在指定目录
- Zabbix监控指定端口
- Android指定专用APN
- iOS 指定初始化方法
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Designing Data-Intensive Applications
Martin Kleppmann / O'Reilly Media / 2017-4-2 / USD 44.99
Data is at the center of many challenges in system design today. Difficult issues need to be figured out, such as scalability, consistency, reliability, efficiency, and maintainability. In addition, w......一起来看看 《Designing Data-Intensive Applications》 这本书的介绍吧!