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;
    }
}
复制代码
posted @ 2022-11-11 15:57  狂客  阅读(1449)  评论(0编辑  收藏  举报