我可以使用
访问我的Servlet中的Spring beanWebApplicationContext springContext =
WebApplicationContextUtils.getWebApplicationContext(getServletContext());
在Servlet的init
方法中。
我想知道servlet过滤器有WebApplicationContext
的等价物吗?
另外,是否可以在标记类中访问Spring bean?
答案 0 :(得分:38)
对于过滤器 - 使用Filter.init()
:
public void init(FilterConfig config) {
WebApplicationContext springContext =
WebApplicationContextUtils.getWebApplicationContext(config.getServletContext());
}
对于代码 - 请使用TagSupport.pageContext
(请注意SimpleTagSupport
中不可用):
WebApplicationContext springContext =
WebApplicationContextUtils.getWebApplicationContext(pageContext.getServletContext());
答案 1 :(得分:26)
您可以使用Spring文档中提到的DelegatingFilterProxy:http://static.springsource.org/spring-security/site/docs/3.0.x/reference/security-filter-chain.html#delegating-filter-proxy
您只需使用与web.xml中声明的filter-name相同的bean名称声明您的真实Filter bean:
的web.xml:
<filter>
<filter-name>SpringTestFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>SpringTestFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
的applicationContext.xml:
<bean id="SpringTestFilter" class="com.company.app.servlet.SpringTestFilter" />
答案 2 :(得分:2)
有几种方法可以获得它
WebApplicationContext springContext =
WebApplicationContextUtils.getWebApplicationContext(getFilterCongig().getServletContext());
WebApplicationContext springContext = RequestContextUtils.getWebApplicationContext(servletRequest)
然后
springContext.getBean("myBeanId");
答案 3 :(得分:0)
您可以使用ContextEsposingHttpServletRequest
包装器将所有bean作为请求属性。