[SPRING] 서블릿 필터에서 Spring 빈을 얻으려면 어떻게해야합니까?
SPRING서블릿 필터에서 Spring 빈을 얻으려면 어떻게해야합니까?
javax.servlet.Filter를 정의했고 스프링 주석이있는 Java 클래스가 있습니다.
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Bean;
@Configuration
public class SocialConfig {
// ...
@Bean
public UsersConnectionRepository usersConnectionRepository() {
// ...
}
// ...
}
내 필터에 Bean UsersConnectionRepository를 가져 오려고 했으므로 다음을 시도했습니다.
public void init(FilterConfig filterConfig) throws ServletException {
UsersConnectionRepository bean = (UsersConnectionRepository) filterConfig.getServletContext().getAttribute("#{connectionFactoryLocator}");
}
하지만 항상 null을 반환합니다. 필터에서 Spring 빈을 얻으려면 어떻게해야합니까?
해결법
-
==============================
1.시험:
시험:
UsersConnectionRepository bean = (UsersConnectionRepository)WebApplicationContextUtils. getRequiredWebApplicationContext(filterConfig.getServletContext()). getBean("usersConnectionRepository");
usersConnectionRepository는 응용 프로그램 컨텍스트에서 Bean의 이름 / ID입니다. 또는 더 나은 :
UsersConnectionRepository bean = WebApplicationContextUtils. getRequiredWebApplicationContext(filterConfig.getServletContext()). getBean(UsersConnectionRepository.class);
또한 GenericFilterBean과 그 하위 클래스를 살펴보십시오.
-
==============================
2.세 가지 방법이 있습니다.
세 가지 방법이 있습니다.
-
==============================
3.Spring은 이것을 위해서 유용한 유틸리티를 가지고있다.
Spring은 이것을 위해서 유용한 유틸리티를 가지고있다.
필터 코드에서 다음과 같이 init 메소드를 재정의하십시오.
public void init(FilterConfig cfg) { super.init(cfg); SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this); }
그런 다음 여러분은 @ 빈을 여러분이 주입 할 빈과 같은 방식으로 그 필터에 주입합니다.
@Inject private UsersConnectionRepository repository;
-
==============================
4.이것을 클래스 아래로 확장합니다.
이것을 클래스 아래로 확장합니다.
abstract public class SpringServletFilter implements Filter{ @Override public void init(FilterConfig filterConfig) throws ServletException { //must provide autowiring support to inject SpringBean SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this, filterConfig.getServletContext()); } @Override public void destroy() { } abstract public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException; }
from https://stackoverflow.com/questions/7882042/how-can-i-get-a-spring-bean-in-a-servlet-filter by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring에서 런타임시 빈을 동적으로 선언한다. (0) | 2018.12.10 |
---|---|
[SPRING] 봄 3 mvc, 올바른 구문을 사용하여 양식지지 개체로 <Foo> 목록? (0) | 2018.12.10 |
[SPRING] @Test 이후 롤백 트랜잭션 (0) | 2018.12.09 |
[SPRING] OAuth2RestTemplate을 사용하는 방법? (0) | 2018.12.09 |
[SPRING] Spring MVC 3에서 양식 제출 - 설명 (0) | 2018.12.09 |