静态代码块 ====>构造方法 ====> BeanPostProcessor.before ===>@PostConstruct ===> InitializingBean.afterPropertiesSet ===>BeanPostProcessor.after ===> InitApplicationRunner.run
@PostConstruct InitializingBean InitApplicationRunner这三个是针对单独某个bean的
BeanPostProcessor 是针对所有的bean
@PostConstruct 是在构造方法执行完之后,有bean了就执行
InitApplicationRunner 是在容器执行完才执行
CommandLineRunner是在项目启动后执行
MyInitializingBean extends InitApplicationRunner implements InitializingBean
InitApplicationRunner implements ApplicationRunner
MyBeanPostProcessor implements BeanPostProcessor
@Component
public class MyInitializingBean extends InitApplicationRunner implements InitializingBean {
{
System.out.println(" 静态代码块 ");
}
public MyInitializingBean(){
System.out.println(" 构造方法 ");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("正在 MyInitializingBean 的 afterPropertiesSet 中执行");
}
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println(" 正在 MyInitializingBean 的 run 方法中执行");
}
@PostConstruct
public void construct(){
System.out.println(" 正在 MyInitializingBean 的 @PostConstruct 方法中执行");
}
}
@Component
public class MyBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
if (bean instanceof MyInitializingBean) {
System.out.println(" 在 MyBeanPostProcessor 的 after 中");
}
return bean;
}
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if (bean instanceof MyInitializingBean) {
System.out.println(" 在 MyBeanPostProcessor 的 before 中");
}
return bean;
}
}
@Component
@Order(value = 1)
public class InitApplicationRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println(" 正在 InitApplicationRunner 的 run 方法中执行");
}
}