目录
1.6 BeanFactoryPostProcessor(Bean工厂级干预)
1.7 CommandLineRunner(命令行启动任务)
1、启动控制接口的核心作用
在Spring框架中,启动控制接口是贯穿Bean生命周期的重要扩展点,开发者通过这些接口可以在容器启动、Bean初始化等关键阶段注入自定义逻辑。以下是几个常用的核心接口:
1.1 ApplicationContextAware
作用:获取Spring容器上下文对象
应用场景:动态获取其他Bean或访问容器级资源
@Component
@Slf4j
public class SpringContextUtil implements ApplicationContextAware {
private static ApplicationContext context;
@Override
public void setApplicationContext(ApplicationContext context) {
this.context = context;
}
public static <T> T getBean(Class<T> clazz) {
return context.getBean(clazz);
}
}
通过该接口可在任意位置调用SpringContextUtil.getBean(Service.class)
获取Bean实例
1.2 InitializingBean
作用:属性注入完成后执行初始化
典型应用:数据库连接池初始化、缓存预热
@Slf4j
@Component
public class DataSourceInit implements InitializingBean {
@Override
public void afterPropertiesSet() {
log.info("数据库连接池初始化、缓存预热");
}
}
该方法会在所有属性设置完成后触发,适用于依赖注入后的初始化验证
1.3 SmartLifecycle
作用:容器完全初始化后执行启动任务
进阶用法:分布式系统组件启动、定时任务调度
@Component
@Slf4j
public class ClusterManager implements SmartLifecycle {
@Override
public void start() {
log.info("启动集群心跳检测");
}
@Override
public void stop() {
log.info("集群心跳检测停止");
}
@Override
public boolean isRunning() {
log.info("isRunning");
return false;
}
@Override
public int getPhase() {
return 1; // 控制启动顺序
}
}
通过getPhase()
方法控制多个组件的启动顺序
1.4 BeanPostProcessor
作用:Bean初始化前后的拦截处理
实战案例:Swagger接口增强、AOP代理生成
public class SwaggerEnhancer implements BeanPostProcessor {
@Override
public Object postProcessAfterInitialization(Object bean, String name) {
if(bean instanceof Docket) {
((Docket) bean).globalRequestParameters(
Collections.singletonList(new RequestParameterBuilder()
.name("X-Auth-Token").build()));
}