2 回答

TA貢獻1775條經驗 獲得超8個贊
我的問題是為什么那些變量分配了那些值?
首先,Spring 創建一個 bean 之后,它會調用那個 bean 的@PostConstruct
方法。
其次,Spring會為以下情況創建一個bean:
如果一個類被注解
@Component
或者它的構造型注解如@Repository
,@Service
, 和@Controller
etc ,并且為包含該類的包啟用自動掃描功能,它將為它創建一個 bean。如果
@Configuration
/@Component
class 上的方法被注解@Bean
,Spring 將調用該方法來創建一個 bean。
因此,您的示例創建了 2 個類型為Actuator
. A 歸因于@Component
onActuator
類,而 B 歸因于@Bean
方法 on BeanCreator.actuator()
。這就是為什么您會看到init()
執行兩次,因為有兩個Actuator
bean。對于 A ,它init()
是用 NULL 執行的。對于 B,它init()
是用“abc”和“xyz”執行的,只是因為您在@Bean
創建它的方法中設置了它。

TA貢獻1963條經驗 獲得超6個贊
根據 Spring 的官方文檔,注釋為的方法@Bean
將自動執行,我假設這發生在您希望它發生之前的某個時間點。
要聲明一個 bean,只需使用 @Bean 注釋來注釋一個方法。當 JavaConfig 遇到這樣的方法時,它將執行該方法并將返回值注冊為 BeanFactory 中的 bean。
您可以使用@DependsOn
注釋來控制 bean 創建順序:
默認情況下,Spring 管理 bean 的生命周期并安排它們的初始化順序。
但是,我們仍然可以根據需要自定義它。我們可以選擇 SmartLifeCycle 接口或 @DependsOn 注釋來管理初始化順序。
我們應該使用此注釋來指定 bean 依賴項。Spring 保證在嘗試初始化當前 bean 之前將初始化定義的 bean。
在本文中閱讀有關此注釋的使用的更多信息。
添加回答
舉報