亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我的類文件正在初始化可能是因為我有一個用于同一類但在不同的

我的類文件正在初始化可能是因為我有一個用于同一類但在不同的

一只萌萌小番薯 2022-12-15 16:10:30
我是 spring 和注釋的新手。我在調試模式下啟動應用程序,我發現當我的代碼到達 Actuator 的 init() 方法時,以下值已分配給 actVar1 和 actVar2。actVar1 具有“abc”值actVar2 具有“xyz”值注意:我的應用程序還沒有完全啟動。我只是出于不同的目的嘗試在 init() 方法中使用調試點,并且我觀察到了上述情況。我的問題是為什么這些變量分配了這些值。//Actuator.java @Componentpublic class Actuator {private String actVar1;private String actVar2;//.. some code here@PostConstructpublic void init(){//my debug point is here //some code .....}//.. some code here}//Beancreator.java@Componentpublic class BeanCreator {//.. some code hereprivate String first="abc";private field2 second ="xyz";//.. some code here@Bean public Actuator actuator() { Actuator actuator = new Actuator(); actuator.setActVar1(first); actuator.setActVar2(second); return actuatorPoller; } //.. some code here}當我將 @Bean 下的方法名稱更改為不同的方法名稱時,這些值不會被分配。
查看完整描述

2 回答

?
www說

TA貢獻1775條經驗 獲得超8個贊

我的問題是為什么那些變量分配了那些值?

首先,Spring 創建一個 bean 之后,它會調用那個 bean 的@PostConstruct方法。

其次,Spring會為以下情況創建一個bean:

  • 如果一個類被注解@Component或者它的構造型注解@Repository@Service, 和@Controlleretc ,并且為包含該類的包啟用自動掃描功能,它將為它創建一個 bean。

  • 如果@Configuration@Componentclass 上的方法被注解@Bean,Spring 將調用該方法來創建一個 bean。

因此,您的示例創建了 2 個類型為Actuator. A 歸因于@ComponentonActuator類,而 B 歸因于@Bean方法 on BeanCreator.actuator()。這就是為什么您會看到init()執行兩次,因為有兩個Actuatorbean。對于 A ,它init()是用 NULL 執行的。對于 B,它init()是用“abc”和“xyz”執行的,只是因為您在@Bean創建它的方法中設置了它。


查看完整回答
反對 回復 2022-12-15
?
神不在的星期二

TA貢獻1963條經驗 獲得超6個贊

根據 Spring 的官方文檔,注釋為的方法@Bean將自動執行,我假設這發生在您希望它發生之前的某個時間點。

要聲明一個 bean,只需使用 @Bean 注釋來注釋一個方法。當 JavaConfig 遇到這樣的方法時,它將執行該方法并將返回值注冊為 BeanFactory 中的 bean。

您可以使用@DependsOn注釋來控制 bean 創建順序:

默認情況下,Spring 管理 bean 的生命周期并安排它們的初始化順序。

但是,我們仍然可以根據需要自定義它。我們可以選擇 SmartLifeCycle 接口或 @DependsOn 注釋來管理初始化順序。

我們應該使用此注釋來指定 bean 依賴項。Spring 保證在嘗試初始化當前 bean 之前將初始化定義的 bean。

在本文中閱讀有關此注釋的使用的更多信息。


查看完整回答
反對 回復 2022-12-15
  • 2 回答
  • 0 關注
  • 110 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號