Próbuję wstrzyknąć fasolę wiosenną do filtra, ale nie mogę jej uruchomić.Wiosna i @Apiowi na DelegatingFilterProxy
Wstrzyknięta fasola ma zawsze wartość "null". Udaje mi się wyposażyć ten sam komponent w Kontrolery i HandlerInterceptory, więc jest poprawnie adnotowany.
Klasa filtra znajduje się pod tym samym pakietem podstawowym co pozostałe kontrolery.
To jest odpowiednia część mojego web.xml
<filter>
<filter-name>CheckSession</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>CheckSession</filter-name>
<url-pattern>/panel/*</url-pattern>
</filter-mapping>
Jest to kod dla filtra
@Component
public class CheckSession extends OncePerRequestFilter implements Filter {
@Autowired private Usuario usuario;
@Override
protected void doFilterInternal(
HttpServletRequest request,
HttpServletResponse response, FilterChain chain)
throws ServletException, IOException {
// always null
System.out.println("autowired " + usuario);
chain.doFilter(request, response);
}
}
Filtr wyzwalającego na każde żądanie.
Są to adnotacje w "usuario" fasoli
@Component
@Scope(value="session", proxyMode=ScopedProxyMode.TARGET_CLASS)
public class Usuario implements java.io.Serializable { ... }
Czego mi brakuje? Dzięki!
shouldn użyjesz dokładnej nazwy klasy w "klasie filtrów"? Czy jesteś pewien, że twój filtr jest zarządzany przez Spring? Nie powinieneś używać tutaj @Configurable? – skegg99
Nazwa filtra to CheckSession, taka sama, jak wskazano w "nazwa-filtra". Jeśli zmienię tę nazwę w "filter-name", otrzymam "NoSuchBeanDefinitionException" ze Spring. Więc tak, filtr jest zarządzany przez Spring (przez DelegatingFilterProxy), ale mechanizm autowire nadal nie działa ...:( – metacortechs