获取Spring的上下文,并设置在ApplicationContextStore中
import org.springframework.context.ApplicationContext;
public class ApplicationContextStore {
private static ApplicationContext applicationContext;
public static void setApplicationContext(ApplicationContext applicationContext) {
ApplicationContextStore.applicationContext = applicationContext;
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
}
第一种
:使用ApplicationContextInitializer接口,让SpringApplication启动时进行回调,然后获取ApplicationContext。
1、创建接口
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;
public class UseInit implements ApplicationContextInitializer<ConfigurableApplicationContext> {
@Override
public void initialize(ConfigurableApplicationContext configurableApplicationContext) {
ApplicationContextStore.setApplicationContext(configurableApplicationContext);
}
}
2、注册接口
@SpringBootApplication
public class SpringdemoApplication {
public static void main(String[] args) {
//SpringApplication.run(SpringdemoApplication.class, args);
SpringApplication application = new SpringApplication(SpringdemoApplication.class);
application.addInitializers(new UseInit());
application.run(args);
}
}
第二种
:使用ApplicationListener接口,当SpringApplication启动时候,对ApplicationContextEvent事件进行监听然后回调接口,获取ApplicationContext。
@Component
public class UseListener implements ApplicationListener<ApplicationContextEvent> {
@Override
public void onApplicationEvent(ApplicationContextEvent applicationContextEvent) {
ApplicationContextStore.setApplicationContext(applicationContextEvent.getApplicationContext());
}
}
需要注意对是,需要注册为Spring的Bean,由SpringApplication正常启动时自动获取。
第三种
:SpringApplication启动时,return出来的就是ApplicationContext。
@SpringBootApplication
public class SpringdemoApplication {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(SpringdemoApplication.class, args);
ApplicationContextStore.setApplicationContext(context);
}
}
第四种
:使用SpringApplicationAware,利用Spring的Bean周期,在Bean初始化的时候获取ApplicationContext。
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class UseAware implements ApplicationContextAware {
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
ApplicationContextStore.setApplicationContext(applicationContext);
}
}
网友评论