获取spring上下文 - applicationContext
前言
spring上下文是spring容器抽象的一种实现。将你需spring帮你管理的对象放入容器的一种对象,ApplicationContext是一维护Bean定义以及对象之间协作关第的高级接口。
获取spring的上下文环境ApplicationContext的方式
一)、通过WebApplicationUtils工具类获取。
WebApplicationUtils类是在Spring框架基础包spring-web-3.2.0. RELEASE.jar中的类。使用该方法的必须依赖Servlet容器。 使用方法如下:
// Spring中获取ServletContext对象,普通类中可以这样获取
ServletContext sc = ContextLoader.getCurrentWebApplicationContext().getServletContext();
// servlet中可以这样获取,方法比较多
ServletContext sc = request.getServletContext():
ServletContext sc = servletConfig.getServletContext(); //servletConfig可以在servlet的init(ServletConfig config)方法中获取得到 /* 需要传入一个参数ServletContext对象, 获取方法在上面 */
// 这种方法 获取失败时抛出异常
ApplicationContext ac = WebApplicationContextUtils.getRequiredWebApplicationContext(sc);
// 这种方法 获取失败时返回null
ApplicationContext ac = WebApplicationContextUtils.getWebApplicationContext(sc);
二)、通过加载 配置文件 或 注解配置类 获取
① ClassPathXmlApplicationContext:从类路径下的一个或多个xml配置文件中加载上下文定义,适用于xml配置的方式; 这种测试常用
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
② FileSystemXmlApplicationContext:从文件系统下的一个或多个xml配置文件中加载上下文定义,也就是说系统盘符中加载xml配置文件;
③ XmlWebApplicationContext:从web应用下的一个或多个xml配置文件加载上下文定义,适用于xml配置方式。
④AnnotationConfigApplicationContext:从一个或多个基于java的配置类中加载上下文定义,适用于java注解的方式;
⑤ AnnotationConfigWebApplicationContext:专门为web应用准备的,适用于注解方式;
三)、创建一个自己的工具类(SpringContextHolder)实现Spring的ApplicationContextAware接口。
① 在配置文件中注册工具类
<bean id="springContextHolder" class="com.fubo.utils.spring.SpringContextHolder" lazy-init="false"/>
② 工具类
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component; /**
* 实现spring context的管理
*/
@Component("applicationContextHelper")
public class ApplicationContextHelper implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override
public void setApplicationContext(ApplicationContext context) throws BeansException {
applicationContext = context;
}
//根据类型获取bean
public static <T> T popBean(Class<T> clazz){
checkApplicationContext();
return applicationContext.getBean(clazz);
}
//根据名称获取bean
public static <T> T popBean(String name){
checkApplicationContext();
return applicationContext.getBean(clazz);
}
//根据名称和类型获取bean
public static <T> T popBean(String name, Class<T> clazz){
checkApplicationContext();
return applicationContext.getBean(name, clazz);
} //检查applicationContext是否为空
private static void checkApplicationContext(){
if (applicationContext == null) {
throw new IllegalStateException("applicaitonContext未注入,请在applicationContext.xml中定义SpringContextHolder");
}
}
}
获取spring上下文 - applicationContext的更多相关文章
- 获取spring的ApplicationContext几种方式【转】
		
转自:http://blog.sina.com.cn/s/blog_9c7ba64d0101evar.html Java类获取spring 容器的bean 常用的5种获取spring 中bean的方式 ...
 - JAVA获取Spring上下文
		
1. 添加监听 public class SpringContextListener implements ServletContextListener { //获取spring注入的bean对象 p ...
 - 基于Spring DM管理的Bundle获取Spring上下文对象及指定Bean对象
		
在讲述服务注册与引用的随笔中,有提到context.getServiceReferences()方法,通过该方法可以获取到OSGI框架容器中的指定类型的服务引用,从而获取到对应的服务对象.同时该方法还 ...
 - 怎么获取Spring的ApplicationContext
		
在 WEB 开发中,可能会非常少须要显示的获得 ApplicationContext 来得到由 Spring 进行管理的某些 Bean, 今天我就遇到了,在这里和大家分享一下, WEB 开发中,怎么获 ...
 - quartz的job怎么获取Spring上下文
		
第一步.在org.springframework.scheduling.quartz.SchedulerFactoryBean对象中注入applicationContextSchedulerConte ...
 - 五)Spring + Quartz 复杂业务的两个问题:获取Spring上下文 和 自动注入服务类
		
配置如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http:// ...
 - 手动获取spring的ApplicationContext和bean对象
		
WEB项目: 方法1: 1 ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(S ...
 - 获取Spring的ApplicationContext的方法
		
在网上搜了一下,写一下我试用的两个方法. 1 2 ApplicationContext ctx=new FileSystemXmlApplicationContext("/applica ...
 - 获取spring上下文的bean     工具类
		
有些场景我们不属于controller,service,dao,但是我们需要从spring中得到spring容器里面的bean.这时候我们需要一个类继承 ApplicationContextAware ...
 
随机推荐
- CF1215题解
			
E 假设从小到大排序,每次交换相邻两个,最小次数即冒泡排序也就是逆序对 考虑值域较小,把每个值映射到\([1,20]\) 设\(f_i\)为已经加入集合为\(i\)的值的最小逆序对个数,考虑填表法 即 ...
 - C++2.0新特性(一)——<特性认知、__cplusplus宏开启、Variadic Templates 、左右值区分>
			
一.新特性介绍 2.0新特性包含了C++11和C++14的部分 1.2 启用测试c++11功能 C++ 标准特定版本的支持,/Zc:__cplusplus 编译器选项启用 __cplusplus 预处 ...
 - ssh 连接云主机错误
			
ssh链接云主机: ssh root@123.59.xx.xx 报错:THE AUTHENTICITY OF HOST XX CAN’T BE ESTABLISHED 解决办法: ssh -o Str ...
 - 查看windows操作系统的默认编码【转】
			
在Windows平台下,进入DOS窗口,输入:chcp可以得到操作系统的代码页信息,你可以从控制面板的语言选项中查看代码页对应的详细的字符集信息. 例如: 我的活动代码页为:936,它对于的编码格式为 ...
 - windows--zabbix-agent添加主机
			
1.首先在 C 盘根目录下创建 zabbix 的文件夹 2.将需要的文件拖到该文件夹内(bin/win64) 3.修改 windows 配置文件(zabbix.agent.win.conf)的 ...
 - css自定义属性和简单效果
			
简介 CSS Variables,一个并不是那么新的东西,但对css来说绝对是一场革命. 之前使用变量的时候,需要借助sass.less等预处理工具来实现,现在我们可以直接使用css来声明变量. 兼容 ...
 - Git的使用(1) —— 版本库
			
1. 简介 Git作为一个分布式版本控制系统,其优点是不需要一直连接远端版本库就可以使用. 故其为实现分布版本控制专门设计了一整套的存储区间和语句,用来实现. (1) 本地版本库:建立在本机磁盘上的文 ...
 - 2018-2019-2 《网络对抗技术》Exp9 WebGoat 20165326
			
Web安全基础 jar包,密码:9huw 实验问题回答 SQL注入攻击原理,如何防御 原理:恶意用户在提交查询请求的过程中将SQL语句插入到请求内容中,同时程序本身对未对插入的SQL语句进行过滤,导致 ...
 - 【软工实践】Alpha冲刺(2/6)
			
链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 小组内容 恩泽(组长) 过去两天完成了哪些任务 描述 了解了如何根据系统获取的实际情况进行后端任务的调整 网易云音乐推荐算法的分析 ...
 - JSON HiJacking攻击
			
JSON劫持类似于CSRF攻击,为了了解这种攻击方式,我们先看一下Web开发中一种常用的跨域获取数据的方式:JSONP. 先说一下JSON吧,JSON是一种数据格式,主要由字典(键值对)和列表两种存在 ...