如何在Java Filter 中注入 Service
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Java Filter 中注入 Service相关的知识,希望对你有一定的参考价值。
参考技术A 在Java Filter 中注入 Service解决方法:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException HttpServletRequest req = (HttpServletRequest)request; HttpServletResponse resp = (HttpServletResponse)response; ServletContext sc = req.getSession().getServletContext();
XmlWebApplicationContext cxt = (XmlWebApplicationContext)WebApplicationContextUtils.getWebApplicationContext(sc);
if(cxt != null && cxt.getBean("usersService") != null && usersService == null)
usersService = (UsersService) cxt.getBean("usersService");
Users users = this.usersService.queryByOpenid(openid);
这样就行了。 参考技术B 既然你要需要统计网站流量数据,使用filter,而这个filter使用了一个Service,肯定是是用其一个方法。
照这么看着,我看根本不需要这个filter,在调用这个方法之前使用一个拦截器,亦称spring方法拦截器。在这个拦截器中的继承方法中统计网站流量数据。
==================================================
或者:用 硬编码 在Filter里 new 一个 Service 了出来
在如何在Filter 中注入
今天在做项目的过程中想在filter中注入RedisTemplate,发现使用@Autowired注解报java.lang.NullPointerException。
这是因为filter和springmvc共存在web容器中,filter的初始化和spring容器是摩云关系的,所以会 注入失败。
那么如何在filter中注入RedisTemplate呢?实例如下
public class SessionFilter implements Filter
// 声明一个redisTemplate
RedisTemplate redisTemplate;
public void destroy()
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException
// 获取容器
HttpServletRequest req = (HttpServletRequest) request;
ServletContext sc = req.getSession().getServletContext();
XmlWebApplicationContext cxt = (XmlWebApplicationContext) WebApplicationContextUtils.getWebApplicationContext(sc);
// 从容器中获取redisTemplate
if(cxt != null && cxt.getBean("redisTemplate") != null && redisTemplate == null)
redisTemplate = (RedisTemplate) cxt.getBean("redisTemplate");
Object user = redisTemplate.opsForValue().get("sessionId");
@Override
public void init(FilterConfig filterConfig) throws ServletException
先在代码中获取到XmlWebApplicationContext ,再从容器中获取实例即可
以上是关于如何在Java Filter 中注入 Service的主要内容,如果未能解决你的问题,请参考以下文章