我正在编写我的第一个 spring-boot 应用程序,所以我相信我的某个配置问题导致了我的错误。
我有一个类“MyInterceptor”,它用“@Component”注释并扩展了 HandlerInterceptorAdapter。
@Component
public class MyInterceptor extends HandlerInterceptorAdapter { ... }
我有一个用“@Configuration”注释的配置类“WebConfiguration”(并且没有用“@EnableWebMvc”注释)。
我在 WebConfiguration 中声明/注入我的拦截器类,如下所示:
@Resource
private MyInterceptor myInterceptor;
然后将此类指定为拦截器,如下所示:
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myInterceptor);
}
在 MyInterceptor 中,我声明了一个要为其注入值的属性。我已将其声明为默认值,如下所示:
@Value("${my.interceptor.property:default_value}")
private String myInterceptorProperty;
当我像上面那样在@Value 注释中声明“default_value”时,始终使用该值。我的 application-dev.yml 文件中声明的值被忽略。
当我删除默认值时,将使用我的 application-dev.yml 中的值。
我怀疑 @Value 注释中的默认值是在配置值之后加载并出于某种原因覆盖它。但我不知道为什么或如何阻止它。
我的应用程序中使用 @Value 注释但未在我的 WebConfiguration 中声明/注入的其他服务没有表现出相同的行为。
我尝试像这样添加我的拦截器:
@Bean
public MyInterceptor getMyInterceptor() {
return new MyInterceptor();
}
然后改变了这个:
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(getMyInterceptor());
}
但是当我这样做时,无论我是否声明了默认值,都不会获取 application-dev.yml 中的配置值。
我确实理解为什么 @Resource 注释注入使我配置的属性可用,以及为什么 Config 类中的直接构造函数调用不可用。但是使用 @Resource 注释是错误的方法吗?为什么我的默认设置没有被覆盖?
我应该如何将配置值注入到我的拦截器和在我的 Config 类中类似声明的其他类中?