java获取applicationcontext_SpringBoot获取ApplicationContext
首先来看一个工具类:
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.ContextLoader;
import org.springframework.web.context.WebApplicationContext;
public class SpringUtil {
/**
* @param args
*/
public static void main(String[] args) {
}
private static WebApplicationContext ac = null;
private static ApplicationContext getApplicationContext() {
if(ac==null) {
ac = ContextLoader.getCurrentWebApplicationContext();
}
return ac;
}
public static Object getBean(String beanName) {
return getApplicationContext().getBean(beanName);
}
}
这是笔者在很多项目中经常使用的一个工具类,主要是在一些没有在Spring容器管理下的bean中使用Spring容器管理的bean的场景下使用,有点拗口。大概意思就是,如果在一个地方,如果你不方便通过注入的方式使用spring管理的bean,就可以通过这个工具在任何地方获取spring容器管理的bean,而不是自己去new一个。
很简单的代码,主要就是根据ContextLoader.getCurrentWebApplicationContext()来获取Spring上下文,但是使用SpringBoot后,这下行不通了,ContextLoader.getCurrentWebApplicationContext()获取到的对象为null。SpringBoot和传统web容器还是有点差异,所幸,我们还是可以通过ApplicationContextAware的方式来获取ApplicationContext。
对上面的代码稍微做下修改,增加setApplicationContext方法,到时在ApplicationContextAware将ApplicationContext设置进来:
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.WebApplicationContext;
public class SpringUtil {
private static ApplicationContext ac = null;
public static ApplicationContext getApplicationContext() {
return ac;
}
public static void setApplicationContext(ApplicationContext ac) {
SpringUtil.ac = ac;
}
public static Object getBean(String beanName) {
return getApplicationContext().getBean(beanName);
}
}
@Component
public class ApplicationContextRegister implements ApplicationContextAware {
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringUtil.setApplicationContext(applicationContext);
}
}
这样,我们又可以像往常一样使用SpringUtil这个工具了。
java获取applicationcontext_SpringBoot获取ApplicationContext相关推荐
- java 获取spring对象数组_解析Java中如何获取Spring中配置的bean
解析Java中如何获取Spring中配置的bean Java中如何获取Spring中配置的bean?下面是由百分网小编为大家整理的解析Java中如何获取Spring中配置的bean,喜欢的可以收藏一下 ...
- java 中lock,java中lock获取锁的四种方法
在java接口中会存放着许多方法,方便线程使用时的直接调用.对于lock接口大家都不陌生,我们已经初步对概念进行了理解.那么在获取锁的方法上想必还不是很清楚.下面我们就lock获取锁的四种方法分别进行 ...
- java hibernate configuration 获取_1 Hibernate Configuration 配置
1 四种方式配置Configuration: 传递一个java.util.Properties给Configuration.setProperties(); 放置hibernate.propertie ...
- Java反射机制——获取成员变量构造函数
2019独角兽企业重金招聘Python工程师标准>>> Java反射机制--获取成员变量&构造函数 一.成员变量是java.lang.reflect.Field的对象 1.F ...
- java里 currenttime_java 获取当前时间LocalDateTime currentTimeMillis java.util.Date
总结java里面关于获取当前时间的一些方法 System.currentTimeMillis() 获取标准时间可以通过System.currentTimeMillis()方法获取,此方法不受时区影响, ...
- Java中动态获取项目根目录和tomcat的绝对路径
序言 在开发过程中经常会用到读写文件,其中就必然涉及路径问题.使用固定的绝对路径当然很方便,但会导致程序的可移植性差,比如在代码中写死了要在E盘建一个文件,而移植后的环境中木有E盘,那就只能改代码:又 ...
- java获取当前项目相对路径,在JAVA文件中获取该项目的相对路径
在JAVA文件中获取该项目的相对路径 1.基本概念的理解 绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如: C:\xyz\test.txt 代表了test.t ...
- 获取Spring的ApplicationContext的几种方式
转载自 获取Spring的ApplicationContext的几种方式 Application Context定义 简单来说就是Spring中的高级容器,可以获取容器中的各种bean组件,注册监听事 ...
- java 读取project_java project 和 java web project 获取路径问题
java project中如何获得相对路径(编译后的目录是在/bin目录下)(一般图片 这些目录放在 项目目录下,与src同级) 在static方法中,用 String path = Test.cla ...
最新文章
- Windows下Qt程序打包
- 自然语言处理算法工程师历史最全资料汇总-基础知识点、面试经验
- 基于二代和三代测序技术的柚子基因组混合拼装
- BW:Start Routine
- Leetcode-136. 只出现一次的数字(python3)
- JS中包含其它JS文件
- boost::geometry模块测试地理策略Testing geographic strategies的测试程序
- 百度AI加速器三期结业成员企业估值翻2倍 四期启动
- Python3.4 Django MySQL MySQL-python 安装不成功解决办法 Unable to find vcvarsall.bat 错误
- java开发中对于程序员的几点建议,你们有想到吗?
- [转] android自定义布局中的平滑移动
- java clone数组_Java中的数组有对应的类么,为什么数组可以直接调用clone()方法?...
- stm8s + si4463 寄存器配置
- 集成DC电源RS485/422收发器数字隔离芯片CA-IS309X
- 安卓开发 监听系统语言切换
- python程序打印出10行的杨辉三角_GitHub 标星 6.5w+,Python 小白 100 天学习计划,从新手到玩转!...
- Github渗透测试工具库
- oracle 整理表 碎片,Oracle数据库表空间碎片的查询和整理方法
- 夏天第一图noob sky
- es nested object区别
热门文章
- C#中要使ListBox使用AddRange()时,能够触发SelectedValueChanged事件
- Java读写二进制文件示例
- python中文decode和encode转码
- Cocos-2d 关于SwallowTouch,进一步解释触摸事件分发机制
- 【博客话题】接触Linux 11年
- OpenCV-计算二维矢量幅值cv::magnitude
- android定义 task,Android Gradle 自定义Task 详解
- android 英语论文,Android中Activity的生命周期英语论文+译文.doc
- docker配置 nacos_Docker下Nacos配置应用开发
- ios uiwindow弹窗_iOS-UIWindow详解