从Spring Boot配置类引用组件实例

时间:2017-12-29 03:06:09

标签: java spring spring-boot

请注意:我完全理解这个问题与this one非常相似。我的问题是类似(我想在Spring Boot应用程序中配置过滤器路径/ URL),但是在该问题上接受的答案假设与我设置的配置略有不同但又显着不同的配置。 / p>

所以我有一个非常好的工作过滤器:

// 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...")
    }
}

我还有一个@Configuration类(用于程序化DI),但我不需要在其中为@Bean编写DataModeFilter - 带注释的方法,因为{{1} }是DataModeFilter(Spring DI为我们自动处理)。

我现在只想将@Component应用于路径DataModeFilter中公开的端点。根据其他问题中的accepted answer,我需要在v1/data(DI)课程中添加以下内容:

@Configuration

但是,我的@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引用它?

1 个答案:

答案 0 :(得分:0)

@Configuration    
class MyAppConfigurator {
    @Autowired
    DataModeFilter filter;
}

或只是

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