SpringBoot 四种获取ApplicationContext的方式
参考:https://juejin.cn/post/6844903968234176519
SpringBoot 获取ApplicationContext的方式
由于之前比较懒,每次想要获取Spring上下文的时候。都去现查方案,而且最近发现使用的频率还挺高,因此对获取Spring上下文的方式做了一下总结。
一共总结了四种获取方式。
先自定义一个存放Application的实体bean
public class SpringBeanUtils {
private static ApplicationContext applicationContext;
public static void setApplicationContext(ApplicationContext applicationContext){
SpringBeanUtils.applicationContext = applicationContext;
}
}
复制代码
1. 实现ApplicationContextInitializer
接口
具体代码如下:
public class SecondApplicationContextInitializer implements ApplicationContextInitializer {
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
SpringBeanUtils.setApplicationContext(applicationContext);
}
}
复制代码
实现此步骤之后,还需要将此类注入到Spring容器中,有两种方式
第一种: 在此类上加`@Component`注解
第二种:在 `resources/META-INF/spring.factories`文件中添加以下配置
org.springframework.context.ApplicationContextInitializer=\
SecondApplicationContextInitializer的路径
复制代码
2. 实现ApplicationListener接口
具体代码如下:
public class CustApplicationListener implements ApplicationListener<ApplicationContextEvent> {
@Override
public void onApplicationEvent(ApplicationContextEvent event) {
SpringBeanUtils.setApplicationContext(event.getApplicationContext());
}
}
复制代码
实现此步骤之后,还需要将此类注入到Spring容器中,有两种方式
第一种: 在此类上加`@Component`注解
第二种:在 `resources/META-INF/spring.factories`文件中添加以下配置
org.springframework.context.ApplicationListener=\
CustApplicationListener的路径
复制代码
3. 放在启动类main方法中设置
具体代码如下
@SpringBootApplication
public class WangMikeSpringApplication {
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(WangMikeSpringApplication.class, args);
SpringBeanUtils.setApplicationContext(applicationContext);
}
}
复制代码
4. 实现ApplicationContextAware接口
具体代码如下
@Component
public class SpringBeanUtils implements ApplicationContextAware {
private static ApplicationContext applicationContext;
public void setApplicationContext(ApplicationContext applicationContext){
SpringBeanUtils.applicationContext = applicationContext;
}
}
复制代码