记录一下SpringBean在容器中初始化时常见的生命周期接口回调
示例Demo
@Component
public class BeanLifeCycleTest implements InitializingBean, ApplicationListener<ContextRefreshedEvent>, CommandLineRunner, ApplicationRunner, ApplicationContextAware, BeanFactoryAware, BeanNameAware, ApplicationContextInitializer {
UserService userService;
@Autowired
RoleService roleService;
@Autowired
public void setDemoService(UserService userService) {
System.err.println("----> bean初始化生命周期: setter执行");
this.userService = userService;
}
public BeanLifeCycleTest() {
System.err.println("----> bean初始化生命周期: constructor: "+ (userService == null ? "setter未注入" : "setter已注入") + "\t" +(roleService == null ? "field未注入" : "field已注入"));
}
@PostConstruct
public void postConstruct() {
System.err.println("----> bean初始化生命周期: postConstruct: "+ (userService == null ? "setter未注入" : "setter已注入") + "\t" + (roleService == null ? "field未注入" : "field已注入"));
}
@Override
public void afterPropertiesSet() throws Exception {
System.err.println("----> bean初始化生命周期: afterPropertiesSet: "+ (userService == null ? "setter未注入" : "setter已注入") + "\t" + (roleService == null ? "field未注入" : "field已注入"));
}
@Override
public void onApplicationEvent(ContextRefreshedEvent arg0) {
System.err.println("----> bean初始化生命周期: ApplicationListener " + (userService == null ? "setter未注入" : "setter已注入") + "\t" + (roleService == null ? "field未注入" : "field已注入"));
}
@Override
public void run(String... args) throws Exception {
System.err.println("----> bean初始化生命周期: CommandLineRunner " + (userService == null ? "setter未注入" : "setter已注入") + "\t" + (roleService == null ? "field未注入" : "field已注入"));
}
@Override
public void run(ApplicationArguments args) throws Exception {
System.err.println("----> bean初始化生命周期: ApplicationRunner " + (userService == null ? "setter未注入" : "setter已注入") + "\t" + (roleService == null ? "field未注入" : "field已注入"));
}
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
System.err.println("----> bean初始化生命周期: ApplicationContextInitializer " + (userService == null ? "setter未注入" : "setter已注入") + "\t" + (roleService == null ? "field未注入" : "field已注入"));
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
System.err.println("----> bean初始化生命周期: ApplicationContextAware " + (userService == null ? "setter未注入" : "setter已注入") + "\t" + (roleService == null ? "field未注入" : "field已注入"));
}
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
System.err.println("----> bean初始化生命周期: BeanFactoryAware " + (userService == null ? "setter未注入" : "setter已注入") + "\t" + (roleService == null ? "field未注入" : "field已注入"));
}
@Override
public void setBeanName(String name) {
System.err.println("----> bean初始化生命周期: BeanNameAware " + (userService == null ? "setter未注入" : "setter已注入") + "\t" + (roleService == null ? "field未注入" : "field已注入"));
}
}
执行结果
----> bean初始化生命周期: constructor: setter未注入 field未注入
----> bean初始化生命周期: setter执行
----> bean初始化生命周期: BeanNameAware setter已注入 field已注入
----> bean初始化生命周期: BeanFactoryAware setter已注入 field已注入
----> bean初始化生命周期: ApplicationContextAware setter已注入 field已注入
----> bean初始化生命周期: postConstruct: setter已注入 field已注入
----> bean初始化生命周期: afterPropertiesSet: setter已注入 field已注入
----> bean初始化生命周期: ApplicationListener setter已注入 field已注入
----> bean初始化生命周期: ApplicationRunner setter已注入 field已注入
----> bean初始化生命周期: CommandLineRunner setter已注入 field已注入