代码示例:
└── src
└── main
└── java
└── demo
├── Main.java
└── bean
├── Bean01.java
└── Bean02.java
Main.java 代码:
package demo;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan(basePackages = "demo.bean")
public class Main {
public static void main(String[] args) {
new AnnotationConfigApplicationContext(Main.class);
}
}
Bean01.java 代码:
package demo.bean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class Bean01 implements InitializingBean {
public Bean01() {
System.out.printf("%s construct\n", getClassName());
}
@PostConstruct
public void postConstruct() {
System.out.printf("%s @PostConstruct\n", getClassName());
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.printf("%s InitializingBean.afterPropertiesSet\n", getClassName());
}
private String getClassName() {
return this.getClass().getSimpleName();
}
}
Bean02.java 代码:
package demo.bean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class Bean02 implements InitializingBean {
public Bean02() {
System.out.printf("%s construct\n", getClassName());
}
@PostConstruct
public void postConstruct() {
System.out.printf("%s @PostConstruct\n", getClassName());
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.printf("%s InitializingBean.afterPropertiesSet\n", getClassName());
}
private String getClassName() {
return this.getClass().getSimpleName();
}
}
运行 Main.java,输出如下:
Bean01 construct
Bean01 @PostConstruct
Bean01 InitializingBean.afterPropertiesSet
Bean02 construct
Bean02 @PostConstruct
Bean02 InitializingBean.afterPropertiesSet
可以看到是 Bean01 先初始化,然后 Bean02 初始化。
我们可以给 Bean01 加上注解 @DependsOn("bean02")
,让 bean02 先初始化:
@Component
@DependsOn("bean02")
public class Bean01 implements InitializingBean {
// ....
再次执行 Main.java,输出如下:
Bean02 construct
Bean02 @PostConstruct
Bean02 InitializingBean.afterPropertiesSet
Bean01 construct
Bean01 @PostConstruct
Bean01 InitializingBean.afterPropertiesSet