为什么你的 SpringBoot 自动配置失效了

  • Post author:
  • Post category:其他


问题描述

下面是一个简单复现的代码片段,在你没有阅读完本文时,如果能做出正确的判断,那恭喜你可以节省阅读本文的时间了。

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 版权协议,转载请附上原文出处链接和本声明。