вторник, 23 декабря 2008 г.

Вызов спринговых бинов из фильтра

Если возникает необходимость вызова спринговых сервисов из фильтров можно использовать класс org.springframework.web.context.support.WebApplicationContextUtils, который позволяет обращатся к бинам по имени. По умолчанию имя бина совпадает с именем класа но начинается с маленькой буквы.
Например имеется бин PublisherService:

1 @Service
2 public class PublisherService {
3
4 @Autowired
5 private PubliherDAO publisherDAO;
6
7 //...
8 }

тогда его можно вызвать из фильтра следующим образом

1 public class MyFilter implements Filter {
2
3 private final Log log = LogFactory.getLog(getClass());
4
5 private PublisherService publisherService;
6
7 public void init(FilterConfig config) throws javax.servlet.ServletException {
8 if (null == publisherService) {
9 publisherService = (PublisherService) WebApplicationContextUtils
10 .getWebApplicationContext(config.getServletContext()).getBean(
11 "publisherService");
12 }
13 }
14
15 public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
16 throws IOException, ServletException {
17
18 HttpServletRequest request = (HttpServletRequest) req;
19 HttpServletResponse response = (HttpServletResponse) resp;
20
21 // to do something with publisherService
22
23 chain.doFilter(req, resp);
24
25 }
26
27 public void destroy() {
28 }
29 }

web.xml файл при етом может выглядеть например так:

1 <?xml version="1.0" encoding="UTF-8"?>
2
3 <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
4 xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
5 xsi:schemaLocation=
"http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
6 version=
"2.4">

7
8 <display-name>MyApp</display-name>
9
10 <context-param>
11 <param-name>contextConfigLocation</param-name>
12 <param-value>
13 classpath:/**/applicationContext-*.xml,
14 </param-value>
15 </context-param>
16
17 <servlet>
18 <servlet-name>SpringMVC</servlet-name>
19 <servlet-class>
20 org.springframework.web.servlet.DispatcherServlet
21 </servlet-class>
22 <init-param>
23 <param-name>contextConfigLocation</param-name>
24 <param-value>classpath:**/SpringMVC-*.xml</param-value>
25 </init-param>
26 <load-on-startup>1</load-on-startup>
27 </servlet>
28
29 <context-param>
30 <param-name>log4jConfigLocation</param-name>
31 <param-value>/WEB-INF/classes/log4j.properties</param-value>
32 </context-param>
33
34 <filter>
35 <filter-name>MyFilter</filter-name>
36 <filter-class>mypack.MyFilter</filter-class>
37 </filter>
38 <filter-mapping>
39 <filter-name>MyFilter</filter-name>
40 <servlet-name>SpringMVC</servlet-name>
41 <dispatcher>REQUEST</dispatcher>
42 <dispatcher>FORWARD</dispatcher>
43 <dispatcher>INCLUDE</dispatcher>
44 </filter-mapping>
45
46 <servlet-mapping>
47 <servlet-name>SpringMVC</servlet-name>
48 <url-pattern>*.htm</url-pattern>
49 </servlet-mapping>
50
51 <welcome-file-list>
52 <welcome-file>index.html</welcome-file>
53 <welcome-file>index.jsp</welcome-file>
54 </welcome-file-list>
55
56 </web-app>

Комментариев нет: