我正在開發一個Spring Boot應用程序,並嘗試使用基於Java註釋的bean創建(使用@Configuration和@Bean)而不是熟悉的舊的基於XML的bean創建。我很困惑。如果我嘗試在XML中創建一個bean但未能設置@Required屬性,那麼當創建應用程序上下文時,我會得到一個BeanInitializationException。在迄今爲止的基於註釋的bean創建的嘗試中,雖然看起來並不是這樣。Spring @Required屬性創建@Bean帶註釋的bean
例如:
public class MyClass {
...
@Required
public void setSomeProp(String val){
}
}
然後在Spring XML:
<bean class="MyClass"/>
這將在應用程序啓動(和IntelliJ標誌吧)炸燬,因爲所需的屬性未設置。但是,這似乎不是這樣的:
@Configuration
public class MyConfig {
@Bean
public MyClass myClass() {
return new MyClass();
}
}
即使未設置所需的屬性,此應用程序啓動就好了。我必須在這裏錯過一些東西,因爲這在Spring中似乎是一個非常關鍵的特性。
UPDATE
我做了一些挖&調試和事實證明,在bean定義以某種方式被標記跳過檢查@Required字段設置。在Spring類'RequiredAnnotationBeanPostProcessor'中,布爾方法'shouldSkip()'對於以這種方式創建的bean返回true。當我使用調試器強制該方法返回錯誤的bean創建確實炸燬了預期的異常。
鑑於我正在製作一個非常基本的Spring Boot應用程序,我傾向於(像Zergleb所建議的)將其作爲錯誤提交。
更新2 一些進一步的調試透露,即使場是越來越設置強制檢查仍然拋出同樣的異常,就好像它尚未確定。所以也許敦尼是正確的,並且沒有辦法使用@Bean符號。
提交錯誤報告:https://github.com/spring-projects/spring-boot/issues/3981 – pedorro