2017-12-29 5 views
-1

참고 : 나는이 질문이 매우 에서 this one 인 100 %를 이해합니다. 제 질문은 과 비슷합니다. (스프링 부트 응용 프로그램 내에서 필터 경로/URL을 구성하고 싶습니다.) 그러나이 질문에 대한 대답은 제가 설정 한 것과는 약간 다르지만 중요한 구성을 추측합니다. 그래서스프링 부트 구성 클래스의 컴포넌트 인스턴스 참조하기


나는 위대한 작품을 작업 필터가 있습니다

// Groovy pseudo-code 
@Component 
@Order(Ordered.HIGHEST_PRECEDENCE) 
@Slf4j 
class DataModeFilter implements Filter { 
    @Autowired 
    List<EndpointConfig> endpointConfigs 

    @Autowired 
    MyAppProperties myAppProperties 

    @Override 
    void init(FilterConfig filterConfig) throws ServletException { 
     log.trace("Initializing the ${this.class.name} filter...") 
    } 

    @Override 
    void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
     log.trace("Do some stuff") 
    } 

    @Override 
    void destroy() { 
     log.trace("Destroying the ${this.class.name} filter...") 
    } 
} 

가 나는 또한 (프로그램 DI 용) @Configuration 클래스가를하지만 내부 @Bean -annotated 방법을 쓸 필요가 없습니다 DataModeFilter의 경우 DataModeFilter@Component (스프링 DI가 자동으로 처리합니다.)이기 때문에

이제 v1/data 경로에 노출 된 끝점에만 내 DataModeFilter을 적용하고 싶습니다. 다른 문제의 accepted answer에 따르면, 나는 내 @Configuration (DI) 클래스에 다음을 추가해야합니다

@Configuration 
class MyAppConfigurator { 
    // Lots of other @Beans declared up here 

    @Bean 
    FilterRegistrationBean filterRegistrationBean() { 
     FilterRegistrationBean registration = new FilterRegistrationBean() 

     registration.setFilter(dataModeFilter()) 
     registration.addUrlPatterns("/v1/data/*") 
     registration.addInitParameter("paramName", "paramValue") 
     registration.setName("dataModeFilter") 
     registration.setOrder(1) 

     registration 
    } 

    @Bean(name = "dataModeFilter") 
    Filter dataModeFilter() { 
     // How to refer to my @Component-annotated DataModeFilter instance?!? 
    } 
} 

는하지만, 내 DataModeFilter 해당 클래스에서 @Bean가 아닌, 그래서 어떻게 내가 그것을 참조 할 내 FilterRegistrationBean?

답변

0
@Configuration  
class MyAppConfigurator { 
    @Autowired 
    DataModeFilter filter; 
} 

하거나

private final DataModeFilter filter; 
public MyAppConfigurator(DataModeFilter filter) {...} 
+0

감사 @Abhijit (+1) - MyAppConfigurator''를 제외하고는 @ Configuration' ...'에 의해 주석이 할 수있는 I 아직도의''DataModeFilter와 Autowire' 그것은 @ '인스턴스? – smeeb

+0

방금 ​​할 수 있다고 말하지 않았습니까? –

+0

아니요 :-) 위 코드 예에서'MyAppConfigurator'에'@Configurator'를 주석으로 추가하지 않았습니다 ... 그래서'@Configuration'을 추가하여 Spring을 망칠 지 궁금합니다 ... 확인해 주시겠습니까? (필요하다면 코드 예제를 업데이트하십시오!) 어느쪽으로 든? 다시 한 번 감사드립니다! – smeeb

관련 문제