日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

@postconstruct注解 和 InitializingBean 在bean實例化后執行某些初始化操作

作者:神筆碼靚 更新時間: 2022-07-13 編程語言

起初是這段代碼:

@Service
public class userService {

    @Autowired
    private BaseConfig baseConfig;


    private IClient client;

	public userService () {
		client = ClientFactory.getClient(IClient.class, baseConfig.getBaseUrl());
    }

	public userinfo getUserInfo(){
		return client.getUserInfos();
	}

}

結果在程序運行啟動時,發現在構造方法中調用baseConfig 返回的結果是 baseConfig 為 null.

后來查閱資料發現,java在bean 初始化的過程中,是先執行類的構造函數,實例化一個普通的對象,然后將這個普通的 實例對象存入到 singletonFactories 的 map 中,后續通過檢查 是否出現循環依賴和APO 等操作后, 執行初始化該實例對象,讓后將初始化的實例對象放入到單例池中。

所以在上述操作中,通過構造方法,獲取依賴注入的實例字段,是不切實際的。

解決方法 :
一、 通過注解@PostConstruct 實現在bean實例化后的初始化操作。

@Service
public class userService {

    @Autowired
    private BaseConfig baseConfig;


    private IClient client;
	
	@PostConstruct
	public void initClient () {
		client = ClientFactory.getClient(IClient.class, baseConfig.getBaseUrl());
    }

	public userinfo getUserInfo(){
		return client.getUserInfos();
	}

}

二、通過實現 InitializingBean接口,實現在bean實例化后的初始化操作。

@Service
public class userService  implements InitializingBean {

    @Autowired
    private BaseConfig baseConfig;


    private IClient client;
	
    @Override
    public void afterPropertiesSet() throws Exception {
		client = ClientFactory.getClient(IClient.class, baseConfig.getBaseUrl());
    }

	public userinfo getUserInfo(){
		return client.getUserInfos();
	}
}

原文鏈接:https://blog.csdn.net/daxues_/article/details/124861790

欄目分類
最近更新