How can I get a Spring bean in a servlet filter?
java, servlet-filters, servlets, spring
Solution
Try:
UsersConnectionRepository bean =
(UsersConnectionRepository)WebApplicationContextUtils.
getRequiredWebApplicationContext(filterConfig.getServletContext()).
getBean("usersConnectionRepository");
Where `usersConnectionRepository` is a name/id of your bean in the application context. Or even better:
UsersConnectionRepository bean = WebApplicationContextUtils.
getRequiredWebApplicationContext(filterConfig.getServletContext()).
getBean(UsersConnectionRepository.class);
Also have a look at GenericFilterBean and its subclasses.
Problem
I have defined a `javax.servlet.Filter` and I have Java class with Spring annotations. ``` import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Bean; @Configuration public class SocialConfig { // ... @Bean public UsersConnectionRepository usersConnectionRepository() { // ... } } ``` I want to get the bean `UsersConnectionRepository` in my `Filter`, so I tried the following: ``` public void init(FilterConfig filterConfig) throws ServletException { UsersConnectionRepository bean = (UsersConnectionRepository) filterConfig.getServletContext().getAttribute("#{connectionFactoryLocator}"); } ``` But it always returns `null`. How can I get a Spring bean in a `Filter`?