小编Ale*_*ppa的帖子

自定义springboot自动配置无法检测bean

我开发了一个自定义的Spring Boot自动配置,以便于使用专有的消息库.

主要的自动配置类基本如下:

@Configuration
@ConditionalOnClass({LibServer.class, LibClient.class})
@EnableConfigurationProperties(LibProperties.class)
public class LibAutoConfiguration {

    @Autowired
    LibProperties props;

    @Bean
    @ConditionalOnMissingBean(LibServer.class)
    public LibServer lbServ() {
        // create and configure a server object
    }

    @Bean
    @ConditionalOnMissingBean(LibClient.class)
    public LibClient lbClient() {
        //create and configure a client object
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,似乎条件注释不检测在主@SpringBootApplication注释类中声明的bean .

它仅检测在单独的带@Configuration注释的类中声明的bean .

也就是说,如果我放置两个带@Bean注释的方法,在主类中返回一个LibServer和一个LibClient对象,我最终会在上下文中有两个LibServer和两个LibClient对象(自动配置的对象和显式声明的对象).

本机spring引导自动配置(例如DataSource一个)也可以检测主类中声明的bean(例如带@Bean注释的jdbcTemplate方法).

即使对于在主类中声明的bean,我如何获得正确的bean检测?

编辑

一个完整的多模块maven项目展示了这种行为,请访问https://github.com/AlexFalappa/spring-boot-testcase

java spring spring-boot

5
推荐指数
2
解决办法
5687
查看次数

标签 统计

java ×1

spring ×1

spring-boot ×1