在servlet、filter、Taglib中获取Spring Bean
This entry was posted by kingapex on 星期天, 20 九月, 2009 at
在servlet容器中使用spring框架时spring的上下文(WebApplicationContext)被在保存在ServletContext中。在servlet、filter或jsp标签中获取spring bean的关键在于如何获取ServletContext。
servlet中:
public void init(ServletConfig config){
servletContext= config.getServletContext();
}
filter中:
public void init(FilterConfig config) throws ServletException {
ServletContext servletContext =config.getServletContext();
}
jsp taglib中:
ServletContext servletContext = this.pageContext.getServletContext();
spring的上下文(WebApplicationContext)存在ServletContext以WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE为key的属性中,可通过如下方式获取:
Object ob = servletContext
.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
WebApplicationContext context = (WebApplicationContext) ob;
在WebApplicationContext中获取bean:
protected Object getBean(String name){
return this.getWebApplicationContext().getBean(name);
}
bean中:
private static ApplicationContext ctx;
ctx = SysConstants.AppContext;
if(ctx!=null){
fpSysParaService = (FpSysParaService) ctx.getBean("fpSysParaService");
}
一个抽像的servlet基类:
package com.enation.core.servlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletConfig;
import javax.servlet.Servlet;
import org.springframework.web.context.WebApplicationContext;
/**
* @author kingapex
* @version 1.0
* @created 20-九月-2009 11:52:26
*/
public abstract class BaseServlet implements Servlet {
protected ServletContext servletContext;
/**
*
* @param o0
*/
public void init(ServletConfig config){
servletContext= config.getServletContext();
}
public ServletContext getServletContext(){
return servletContext;
}
public void destroy(){
}
public String getServletInfo(){
return "";
}
protected WebApplicationContext getWebApplicationContext()throws RuntimeException{
Object ob = servletContext
.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
WebApplicationContext context = (WebApplicationContext) ob;
return context;
}
protected Object getBean(String name){
return this.getWebApplicationContext().getBean(name);
}
public ServletConfig getServletConfig(){
return null;
}
}