首先来看一个工具类:

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相关推荐

  1. java 获取spring对象数组_解析Java中如何获取Spring中配置的bean

    解析Java中如何获取Spring中配置的bean Java中如何获取Spring中配置的bean?下面是由百分网小编为大家整理的解析Java中如何获取Spring中配置的bean,喜欢的可以收藏一下 ...

  2. java 中lock,java中lock获取锁的四种方法

    在java接口中会存放着许多方法,方便线程使用时的直接调用.对于lock接口大家都不陌生,我们已经初步对概念进行了理解.那么在获取锁的方法上想必还不是很清楚.下面我们就lock获取锁的四种方法分别进行 ...

  3. java hibernate configuration 获取_1 Hibernate Configuration 配置

    1 四种方式配置Configuration: 传递一个java.util.Properties给Configuration.setProperties(); 放置hibernate.propertie ...

  4. Java反射机制——获取成员变量构造函数

    2019独角兽企业重金招聘Python工程师标准>>> Java反射机制--获取成员变量&构造函数 一.成员变量是java.lang.reflect.Field的对象 1.F ...

  5. java里 currenttime_java 获取当前时间LocalDateTime currentTimeMillis java.util.Date

    总结java里面关于获取当前时间的一些方法 System.currentTimeMillis() 获取标准时间可以通过System.currentTimeMillis()方法获取,此方法不受时区影响, ...

  6. Java中动态获取项目根目录和tomcat的绝对路径

    序言 在开发过程中经常会用到读写文件,其中就必然涉及路径问题.使用固定的绝对路径当然很方便,但会导致程序的可移植性差,比如在代码中写死了要在E盘建一个文件,而移植后的环境中木有E盘,那就只能改代码:又 ...

  7. java获取当前项目相对路径,在JAVA文件中获取该项目的相对路径

    在JAVA文件中获取该项目的相对路径 1.基本概念的理解 绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如: C:\xyz\test.txt 代表了test.t ...

  8. 获取Spring的ApplicationContext的几种方式

    转载自 获取Spring的ApplicationContext的几种方式 Application Context定义 简单来说就是Spring中的高级容器,可以获取容器中的各种bean组件,注册监听事 ...

  9. java 读取project_java project 和 java web project 获取路径问题

    java project中如何获得相对路径(编译后的目录是在/bin目录下)(一般图片 这些目录放在 项目目录下,与src同级) 在static方法中,用 String path = Test.cla ...

最新文章

  1. Windows下Qt程序打包
  2. 自然语言处理算法工程师历史最全资料汇总-基础知识点、面试经验
  3. 基于二代和三代测序技术的柚子基因组混合拼装
  4. BW:Start Routine
  5. Leetcode-136. 只出现一次的数字(python3)
  6. JS中包含其它JS文件
  7. boost::geometry模块测试地理策略Testing geographic strategies的测试程序
  8. 百度AI加速器三期结业成员企业估值翻2倍 四期启动
  9. Python3.4 Django MySQL MySQL-python 安装不成功解决办法 Unable to find vcvarsall.bat 错误
  10. java开发中对于程序员的几点建议,你们有想到吗?
  11. [转] android自定义布局中的平滑移动
  12. java clone数组_Java中的数组有对应的类么,为什么数组可以直接调用clone()方法?...
  13. stm8s + si4463 寄存器配置
  14. 集成DC电源RS485/422收发器数字隔离芯片CA-IS309X
  15. 安卓开发 监听系统语言切换
  16. python程序打印出10行的杨辉三角_GitHub 标星 6.5w+,Python 小白 100 天学习计划,从新手到玩转!...
  17. Github渗透测试工具库
  18. oracle 整理表 碎片,Oracle数据库表空间碎片的查询和整理方法
  19. 夏天第一图noob sky
  20. es nested object区别

热门文章

  1. C#中要使ListBox使用AddRange()时,能够触发SelectedValueChanged事件
  2. Java读写二进制文件示例
  3. python中文decode和encode转码
  4. Cocos-2d 关于SwallowTouch,进一步解释触摸事件分发机制
  5. 【博客话题】接触Linux 11年
  6. OpenCV-计算二维矢量幅值cv::magnitude
  7. android定义 task,Android Gradle 自定义Task 详解
  8. android 英语论文,Android中Activity的生命周期英语论文+译文.doc
  9. docker配置 nacos_Docker下Nacos配置应用开发
  10. ios uiwindow弹窗_iOS-UIWindow详解