spring Bean初始化一般有三种:
-
@PostConstruct 标注方法.
-
实现InitializingBean 接口的afterPropertiesSet 方法。
-
@Bean 注解的initMethod 方法.
上述3中方式在同一Bean 中初始化, 那么1, 2, 3 的执行顺序如何?
代码演示:
/**
* Bean 初始化演示.
*/
@Configuration
public class MyBeanInitializationDemo {
public static void main(String[] args) {
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
applicationContext.register(MyBeanInitializationDemo.class);
// 启动
applicationContext.refresh();
applicationContext.close();
}
@Bean(initMethod = "myDefineInitMethod")
public Person getPerson() {
return new Person();
}
public class Person implements InitializingBean {
private int age;
private String name;
@PostConstruct
public void init() {
System.out.println("PostConstruct init... ");
}
public void myDefineInitMethod() {
System.out.println("自定义的初始化方法 init.");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("InitializingBean init");
}
@Override
public String toString() {
return "Person:[age:" + age + " name:" + name + "]";
}
}
}
执行结果:
PostConstruct init...
InitializingBean init
自定义的初始化方法 init.
结论
- @PostConstructor 先初始化。
- InitializingBean#afterPropertiesSet 后初始化。
- @Bean #initMethod 最后完成初始化.
网友评论