【SpringBoot应用篇】Spring Boot中BeanPostProcessor接口、SmartInitializingSingleton接口的作用
BeanPostProcessor
这个接口是bean处理器,内部有2个方法,分别在bean初始化前后会进行调用
public interface BeanPostProcessor {
/*** bean初始化之后会调用的方法 */
@Nullable
default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
/*** bean初始化之后会调用的方法 */
@Nullable
default Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
}
SmartInitializingSingleton
所有单例bean实例化完成之后,spring会回调下面这个接口
public interface SmartInitializingSingleton {
void afterSingletonsInstantiated();
}
这个方法内部会先触发所有非延迟加载的单例bean初始化,然后从容器中找到类型是SmartInitializingSingleton 的bean,调用他们的 afterSingletonsInstantiated 方法。
@Component
public class Service1 {
public Service1() {
System.out.println("创建"+ this.getClass());
}
}
@Component
public class Service2 {
public Service2() {
System.out.println("创建"+ this.getClass());
}
}
@Component
public class MySmartInitializingSingleton implements SmartInitializingSingleton {
@Override
public void afterSingletonsInstantiated() {
System.out.println("所有bean初始化完毕!");
}
}
@ComponentScan
public class MainConfig {
}
@ComponentScan不指定参数,默认扫描当前类所在包及其子包所在路径。
public class Test {
@org.junit.Test
public void test() {
// 创建容器
AnnotationConfigApplicationContext applicationContext =
new AnnotationConfigApplicationContext();
// 注册bean
applicationContext.register(MainConfig.class);
System.out.println("开始启动容器!");
// 启动容器
applicationContext.refresh();
System.out.println("容器启动完毕!");
}
}