文档章节

如何取得Spring管理的bean

S
 SimonTao
发布于 01/20 12:10
字数 435
阅读 21
收藏 0

3 月,跳不动了?>>>

本文主要讲3中实现方式,请用第3种方法(通用)

1、servlet方式加载时配置如下

<servlet> 
<servlet-name>springMVC</servlet-name> 
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
<init-param> 
<param-name>contextConfigLocation</param-name> 
<param-value>classpath*:/springMVC.xml</param-value> 
</init-param> 
<load-on-startup>1</load-on-startup> 
</servlet>

spring容器放在ServletContext中的key是org.springframework.web.servlet.FrameworkServlet.CONTEXT.springMVC

注意后面的springMVC,是你的servlet-name配置的值,注意适时修改。

ServletContext sc=略 
WebApplicationContext attr = (WebApplicationContext)sc.getAttribute("org.springframework.web.servlet.FrameworkServlet.CONTEXT.springMVC");

2、listener方式加载

web.xml如下:

<context-param> 
 <param-name>contextConfigLocation</param-name> 
 <param-value>/WEB-INF/applicationContext</param-value> 
</context-param> 
 
<listener> 
 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener>

【jsp/servlet】可以这样取得

ServletContext context = getServletContext(); 
WebApplicationContext applicationContext = WebApplicationContextUtils .getWebApplicationContext(context);

3、通用的方法来了,前的 1、2两种方法并不通用,可以抛弃了。

在配置文件中加入:

<!-- 用于持有ApplicationContext,可以使用SpringContextHolder.getBean('xxxx')的静态方法得到spring bean对象 --> 
<bean class="com.xxxxx.SpringContextHolder" lazy-init="false" />

获取如下:

import org.springframework.context.ApplicationContext; 
import org.springframework.context.ApplicationContextAware; 
/** 
 * 以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候中取出ApplicaitonContext. 
 * 
 */ 
public class SpringContextHolder implements ApplicationContextAware { 
private static ApplicationContext applicationContext; 
 
/** 
* 实现ApplicationContextAware接口的context注入函数, 将其存入静态变量. 
*/ 
public void setApplicationContext(ApplicationContext applicationContext) { 
SpringContextHolder.applicationContext = applicationContext; // NOSONAR 
} 
 
/** 
* 取得存储在静态变量中的ApplicationContext. 
*/ 
public static ApplicationContext getApplicationContext() { 
checkApplicationContext(); 
return applicationContext; 
} 
 
/** 
* 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型. 
*/ 
@SuppressWarnings("unchecked") 
public static <T> T getBean(String name) { 
checkApplicationContext(); 
return (T) applicationContext.getBean(name); 
} 
 
/** 
* 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型. 
*/ 
@SuppressWarnings("unchecked") 
public static <T> T getBean(Class<T> clazz) { 
checkApplicationContext(); 
return (T) applicationContext.getBeansOfType(clazz); 
} 
 
/** 
* 清除applicationContext静态变量. 
*/ 
public static void cleanApplicationContext() { 
applicationContext = null; 
} 
 
private static void checkApplicationContext() { 
if (applicationContext == null) { 
throw new IllegalStateException("applicaitonContext未注入,请在applicationContext.xml中定义SpringContextHolder"); 
} 
} 
}
如何取得Spring管理的bean

© 著作权归作者所有

S
粉丝 1
博文 22
码字总数 10298
作品 0
朝阳
私信 提问
加载中

评论(0)

Spring中ApplicationContextAware使用说明

Spring 中提供一些Aware相关接口,像是BeanFactoryAware、 ApplicationContextAware、ResourceLoaderAware、ServletContextAware等等,实作这些 Aware接口的Bean在被初始之后,可以取得一些相...

Josean_Luo
2014/06/07
1W
0
Spring中bean的生命周期

Spring 中bean 的生命周期短暂吗? 在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean 的别名只能维持一个实例,而不是每次都产生一个新的对象使...

ArlenXu
2015/01/18
29
0
SpringContextHolder工具类

1.工具类用途? 该工具类主要用于那些没有归入spring框架管理的类却要调用spring容器中的bean提供的工具类,在spring中要通过IOC依赖注入来取得对应的对象,但是该类通过实现ApplicationCont...

嘴角轻扬30
2018/12/26
212
0
Spring MVC过滤器-委派过滤器代理(DelegatingFilterProxy)

org.springframework.web.filter中有一个特殊的类——DelegatingFilterProxy,该类其实并不能说是一个过滤器,它的原型是FilterToBeanProxy,即将Filter作为spring的bean,由spring来管理。 ...

heroShane
2014/02/10
1.8K
0
在spring中如何配置和使用一个Bean

在Spring中,那些组成你应用程序的主体(backbone)及由Spring IoC容器所管理的对象,被称之为bean。 简单地讲,bean就是由Spring容器初始化、装配及管理的对象,除此之外,bean就与应用程序中...

冰雷卡尔
2012/07/24
201
0

没有更多内容

加载失败,请刷新页面

加载更多

夏令时和时区最佳实践 - Daylight saving time and time zone best practices [closed]

问题: I am hoping to make this question and the answers to it the definitive guide to dealing with daylight saving time, in particular for dealing with the actual change overs.......

技术盛宴
今天
20
0
SSM框架整合

mybatis逆向工程 mybatis-generator生成pojo、mapper接口及映射文件 mapper放到e3-manager-dao层中 导入sql到数据库中; 导入逆向工程工具,配置xml文件 运行main方法 重复运行main不会覆盖!...

七宝1
今天
30
0
OSChina 周日乱弹 —— 和网友的第一次开房经历

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @薛定谔的兄弟 :分享洛神有语创建的歌单「我喜欢的音乐」: 《Ljósið》- Ólafur Arnalds 手机党少年们想听歌,请使劲儿戳(这里) @xiaos...

小小编辑
今天
41
0
程序员职业生涯指引

程序员应该尽早规划自己的职业生涯 为什么写 众所周知 IT 这一行到了一定的年龄、大部分人都或多或少有危机感,特别是今年全国乃至全球发生的疫情、导致整体经济受到很大的影响、这次的疫情影...

科比可比克
今天
11
0
JVM调优实战分析

一、查看服务器项目JVM参数以及参数分析 1、jps 命令 : 列出系统中所有的 Java 应用程序以及PID 如下图所示,26647就是我部署在服务器的一个小项目的 PID 2、jmap命令:查看堆的使用情况 如...

IT-Mamba
今天
42
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部