您的位置:首页 > 编程语言 > Java开发

如何取得Spring管理的bean

2015-01-26 17:23 309 查看
1、servlet方式加载时,

【web.xml】

Xml代码  

<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配置的值,注意适时修改。

Java代码  

ServletContext sc=略  

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

 

2、listener方式加载时:

【web.xml】

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】可以这样取得

Java代码  

ServletContext context = getServletContext();  

WebApplicationContext applicationContext  = WebApplicationContextUtils .getWebApplicationContext(context);   

 

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

在配置文件中加入:

Xml代码  

<!-- 用于持有ApplicationContext,可以使用SpringContextHolder.getBean('xxxx')的静态方法得到spring bean对象 -->  

<bean class="com.xxxxx.SpringContextHolder" lazy-init="false" />  

 

Java代码  

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, 自动转型为所赋值对象的类型. 

* name:第一个字母小写的类名

*/  

@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");  

}  

}  

}  

  转载请注明出处:原文地址:http://elf8848.iteye.com/blog/875830
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息