请注意:我完全理解这个问题与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
引用它?
答案 0 :(得分:0)
@Configuration
class MyAppConfigurator {
@Autowired
DataModeFilter filter;
}
或只是
private final DataModeFilter filter;
public MyAppConfigurator(DataModeFilter filter) {...}