2013-08-20 45 views
2

我有一個Servlet過濾器宣稱,像這樣:春天是不是自動裝配我的過濾器類

@Component 
public class BlahBlahFilter extends OncePerRequestFilter implements Filter { 

與財產申報像這樣:

@Autowired 
@Qualifier("appProperties") 
AppProperties properties; 

我有同樣的自動裝配Autowired聲明在我的很多應用程序中的組件和他們沒有問題 - 但他們都是@Component標記的控制器,服務和其他雜項東西

但只是這個過濾器類被忽略,我無法弄清楚如何讓Spring將屬性注入它。

我在調試日誌文件中注意到,這是組件掃描過程中旁邊這個類的名字寫:

"Ignored because not a concrete top-level class" 

咦?是的,它是一個具體的類,它不是抽象的,也不是一個接口。似乎很腥......

我該怎麼辦?

我看到一些其他的話題,他們絕對沒有幫助。他們都沒有一個可以接受的答案,也沒有任何一個帖子對我的情況有所幫助。

其他相關的代碼片段可以幫助:

的web.xml:

<filter> 
    <filter-name>blahBlahFilter</filter-name> 
    <filter-class>com.blah.BlahBlahFilter</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>blahBlahFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 


<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:spring-mvc.xml</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

彈簧mvc.xml:

<context:annotation-config/> 
    <context:component-scan base-package="com.blah"/> 
    <mvc:annotation-driven/> 

回答

7

當你聲明,像這樣

一個過濾器
<filter> 
    <filter-name>blahBlahFilter</filter-name> 
    <filter-class>com.blah.BlahBlahFilter</filter-class> 
</filter> 

你一個重新告訴Servlet容器初始化它,而不是Spring。因此Spring不管理它的生命週期,也不能自動裝入任何東西。您的上下文中可能有一個BlahBlahFilter bean,但它不會是使用Servlet容器註冊的bean。

使用DelegatingFilterProxy或在WebApplicationInitializer中進行過濾器註冊。