獲取Spring的上下文,并設(shè)置在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啟動時(shí)進(jìn)行回調(diào),然后獲取ApplicationContext骤竹。
1乒验、創(chuàng)建接口
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接口电媳,當(dāng)SpringApplication啟動時(shí)候踏揣,對ApplicationContextEvent事件進(jìn)行監(jiān)聽然后回調(diào)接口,獲取ApplicationContext匾乓。
@Component
public class UseListener implements ApplicationListener<ApplicationContextEvent> {
@Override
public void onApplicationEvent(ApplicationContextEvent applicationContextEvent) {
ApplicationContextStore.setApplicationContext(applicationContextEvent.getApplicationContext());
}
}
需要注意對是捞稿,需要注冊為Spring的Bean,由SpringApplication正常啟動時(shí)自動獲取拼缝。
第三種
:SpringApplication啟動時(shí)娱局,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初始化的時(shí)候獲取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);
}
}