springboot应用获取spring上下文的4种方式
springboot应用获取spring ApplicationContext上下文的几种方式
实际开发中我们经常需要通过spring上下文(ApplicationContext)获取一些配置信息,本文阐述springboot应用获取spring上下文的几种方式。
【仅需9.9订阅专栏合集,作者所有付费文章都能看(持续更新)】
推荐【Kafka教程】https://bigbird.blog.csdn.net/article/details/108770504
推荐【rabbitmq教程】https://bigbird.blog.csdn.net/article/details/81436980
推荐【Flink教程】https://blog.csdn.net/hellozpc/article/details/109413465
推荐【JVM面试与调优教程】https://bigbird.blog.csdn.net/article/details/113888604
推荐【SpringBoot全套教程】https://blog.csdn.net/hellozpc/article/details/107095951
推荐【SpringCloud教程】https://blog.csdn.net/hellozpc/article/details/83692496
推荐【Mybatis教程】https://blog.csdn.net/hellozpc/article/details/80878563
推荐【SnowFlake教程】https://blog.csdn.net/hellozpc/article/details/108248227
推荐【并发限流教程】https://blog.csdn.net/hellozpc/article/details/107582771
推荐【Redis教程】https://bigbird.blog.csdn.net/article/details/81267030
推荐【Netty教程】https://blog.csdn.net/hellozpc/category_10945233.html
全套springboot教程 https://blog.csdn.net/zpcandzhj/category_10159292.html
文章目录
方式一:实现ApplicationContextAware接口
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
/**
* 实现ApplicationContextAware接口设置applicationContext
* 提供static方法供调用者使用,不要求使用者受spring容器管理
*/
@Component
public class SpringContextUtil1 implements ApplicationContextAware {
public static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringContextUtil1.applicationContext = applicationContext;
}
public static ApplicationContext getApplicationContext() {
return SpringContextUtil1.applicationContext;
}
public static Object getBean(String name) {
return getApplicationContext().getBean(name);
}
public static <T> T getBean(Class<T> clazz) {
return getApplicationContext().getBean(clazz);
}
public static <T> T getBean(String name, Class<T> clazz) {
return getApplicationContext().getBean(name, clazz);
}
}
方式二:非static方法版
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
/**
* 实现ApplicationContextAware接口设置applicationContext
* 如果使用者也是被spring管理的bean则可以使用注入的方式使用,而非调用static方法
*/
@Component
public class SpringContextUtil2 implements ApplicationContextAware {
public ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
public ApplicationContext getApplicationContext() {
return this.applicationContext;
}
public Object getBean(String name) {
return applicationContext.getBean(name);
}
public <T> T getBean(Class<T> clazz) {
return applicationContext.getBean(clazz);
}
public <T> T getBean(String name, Class<T> clazz) {
return getApplicationContext().getBean(name, clazz);
}
}
@Component
public class ContextUser{
/**
* 使用者直接注入
*/
@Autowired
public SpringContextUtil2 springContextUtil2;
}
方式三:在springboot引导类里设置
import org.springframework.context.ApplicationContext;
/**
* 在springboot引导类里设置applicationContext
* 工具类无需实现ApplicationContextAware接口
*/
public class SpringContextUtil3 {
public static ApplicationContext applicationContext;
public static ApplicationContext getApplicationContext() {
return SpringContextUtil3.applicationContext;
}
public static void setApplicationContext(ApplicationContext applicationContext) {
SpringContextUtil3.applicationContext = applicationContext;
}
public static Object getBean(String name) {
return getApplicationContext().getBean(name);
}
public static Object getBean(Class<?> requiredType) {
return getApplicationContext().getBean(requiredType);
}
public static <T> T getBean(String name, Class<T> clazz) {
return getApplicationContext().getBean(name, clazz);
}
}
//在springboot引导类里设置applicationContext
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(MainApplication.class, args);
SpringContextUtil3.setApplicationContext(context);
}
}
方式四:直接注入ApplicationContext
@Component
public class ContextUser{
/**
* 在需要使用上下文的地方直接注入(前提:使用者受spring容器管理)
*/
@Autowired
public ApplicationContext applicationContext;
}
怎么样,第四种方式是不是很easy?!
更多内容请关注【程猿薇茑】
更多推荐

所有评论(0)