我開發了一個自定義Spring Boot自動配置,以減輕與專有消息庫的工作。自定義springboot自動配置不檢測豆
主要的自動配置類本質上是如下:
@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
}
}
看來不過是有條件的註釋沒有檢測到主@SpringBootApplication
註解類中聲明豆。
它只檢測在單獨的@Configuration
註釋類中聲明的bean。
也就是說,如果我將兩個@Bean
註解的方法返回一個LibServer
,並在主類我結束了在兩個具有LibServer
和兩個LibClient
對象(自動配置者和顯式聲明的)一個LibClient
對象。
本地彈簧引導自動配置(例如DataSource
之一)也可以檢測主類中聲明的bean(例如@Bean
註釋方法jdbcTemplate
)。
即使對於在主類中聲明的bean,我如何獲得適當的bean檢測?
編輯
一個完整的多模塊Maven項目表現出的行爲是在https://github.com/AlexFalappa/spring-boot-testcase
你的_main class_是什麼樣的,你如何運行你的應用程序? – Morfic
你不是自己導入你的'LibAutoConfiguration',是嗎?自動配置類_must_必須在'spring.factories'中定義,而不是直接加載。在這種情況下,這很重要,因爲我們需要首先處理所有用戶配置,然後檢查是否必須創建這些bean。 –
@StéphaneNicoll:我的自定義自動配置位於一個maven模塊中,該模塊包含相關的'spring.factories'文件,並且通過聲明對專有消息庫的依賴,充當起始模塊。該應用程序位於不同的Maven模塊中,這取決於前者。 –