问题描述
下面是一个简单复现的代码片段,在你没有阅读完本文时,如果能做出正确的判断,那恭喜你可以节省阅读本文的时间了。
1、自动配置类:
AutoTestConfiguration
@Configuration
@EnableConfigurationProperties(TestProperties.class)
@ConditionalOnProperty(prefix = "test", name = "enable")
public class AutoTestConfiguration {
@Bean
@ConditionalOnMissingBean
public TestBean testBean(TestProperties properties){
System.out.println("this is executed.....");
return new TestBean();
}
}
2、配置类
TestProperties
@ConfigurationProperties(prefix = "test")
public class TestProperties {
private boolean enable = true;
public boolean isEnable() {
return enable;
}
public void setEnable(boolean enable) {
this.enable = enable;
}
}
这两个类都在
root package
下,可以保证能够正常被
Spring
扫描到;那么问题是
TestBean
会不会被正常创建?当然这里的结论是不会。
可能有的同学会说你的
TestProperties
没有加
@Configuration
注解,
Spring
不认识它,那真的是这样吗?很显然也不是。
在排查这个问题的过程中,也有遇到其他问题,也是之前没有遇到过的;即使
Spring
源码我看过很多遍,但是仍然会有一些边边角角让你意想不到的地方;下面就针对这个问题,慢慢来揭开它的面纱。
@EnableConfigurationProperties 注解行为
在之前的版本中,
TestProperties
是有被
@Configuration
注解标注的
@Configuration // 可以被 spring 扫描
@ConfigurationProperties(prefix = "test")
public class TestProperties {
private boolean enable = true;
public boolean isEnable() {
return enable;
}
public void setEnable(boo
版权声明:本文为m0_63550462原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。