摘要:案例對靜態變量的注入為空案例代碼如下錯誤案例這種方式是不能給靜態變量注入屬性值的解決方案一注解加在方法上面解決方案二注解因為注解修飾的方法加在順序在構造方法之后靜態變量賦值之前,所
案例代碼如下:
@Componentpublic class HelloWorld { /** * 錯誤案例:這種方式是不能給靜態變量注入屬性值的 */ @Value("${hello.world}") public static String HELLO_WORLD;}
解決方案一:
@Value
注解加在setter方法上面
@Componentpublic class HelloWorld { public static String HELLO_WORLD; @Value("${hello.world}") public void setHELLO_WORLD(String HELLO_WORLD) { this.HELLO_WORLD = HELLO_WORLD; } }
解決方案二:
@PostConstruct
注解
因為@PostConstruct
注解修飾的方法加在順序在構造方法之后靜態變量賦值之前,所以可以通過該注解解決靜態變量屬性值注入失敗問題:
@Componentpublic class HelloWorld { public static String HELLO_WORLD; @Value("${hello.world}") public static String helloWorld; @PostConstruct public void init(){ // 為靜態變量賦值(值為從Spring IOC容器中獲取的hello.world字段值) HELLO_WORLD = this.helloWorld; } }
業務場景假設:
eg:我需要在一個類(HelloWorld)被加載的時候,調用service層的接口(UserService)去執行一個方法(sayHello),有些同學可能會在構造函數中通過調用UserService的sayHello()去實現這個需求,但是這會導致一些錯誤異常,請看下面的示例。
錯誤演示代碼如下:
@Componentpublic class HelloWorld { /** * UserService注入 */ @Autowired private UserService userService; public HelloWorld(){ // 這里會報空指針異常:因為 userService 的屬性注入是在無參數構造函數之后,如果這里直接使用 userService ,此時該屬性值為null,一個為null的成員變量調用sayHello()方法,NullPointException 異常是情理之中呀! userService.sayHello("hello tiandai!"); }}
解決方案:
@PostConstruct
注解
由于@PostConstruct
注解修飾的方法其生命周期位于構造方法調用之后,在Spring屬性值注入之前,所以,該注解可以很好的解決這個業務需求,代碼如下:
@Componentpublic class HelloWorld { /** * UserService注入 */ @Autowired private UserService userService; public HelloWorld(){ } @PostConstruct public void init(){ userService.sayHello("hello tiandai!"); } }
關于這一部分問題,還有一些奇奇怪怪的用法,參考文章:https://blog.csdn.net/dream19990329/article/details/106274283
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/124768.html
摘要:甲乙交易活動不需要雙方見面,避免了雙方的互不信任造成交易失敗的問題。這就是的核心思想。統一配置,便于修改。帶參數的構造函數創建對象首先,就要提供帶參數的構造函數接下來,關鍵是怎么配置文件了。 前言 前面已經學習了Struts2和Hibernate框架了。接下來學習的是Spring框架...本博文主要是引入Spring框架... Spring介紹 Spring誕生: 創建Spring的...
摘要:方案我們手動以構造函數的方式注入依賴,將和作為參數傳入而不是在的構造函數中去顯示的創建。同樣我們需要在類的成員變量上加上表示自己需要為自己提供依賴類的構造函數上的也需要去掉,應為現在不需要通過構造函數上的來提供依賴了。 Dagger-匕首,鼎鼎大名的Square公司旗下又一把利刃(沒錯!還有一把黃油刀,喚作ButterKnife);故此給本篇取名神兵利器Dagger2。 Dagger2...
摘要:實現靜態注入類或者屬性場景是工具類一般都是靜態方法,靜態方法只能訪問靜態屬性。所以,我們需要靜態注入類或者屬性。常規操作注入類或者方法這樣,我們就把容器里的類和里的值注進去了。 [spring實現靜態注入(類或者屬性)]() 場景是:工具類一般都是靜態方法,靜態方法只能訪問靜態屬性。所以,我們需要靜態注入類或者屬性。 常規操作: 注入類或者方法: @Autowired private ...
摘要:的依賴關系,根據依賴關系配置完成之間的裝配。的行為信息,如生命周期范圍及生命周期各過程的回調函數。使用該種裝配模式時,優先匹配參數最多的構造函數。如果提供了默認的構造函數,則采用否則采用進行自動裝配。 點擊進入我的博客 1 Spring容器與Bean配置信息 Bean配置信息 Bean配置信息是Bean的元數據信息,它由一下4個方面組成: Bean的實現類 Bean的屬性信息,如數...
閱讀 2749·2021-11-24 09:39
閱讀 1653·2021-09-28 09:35
閱讀 1124·2021-09-06 15:02
閱讀 1316·2021-07-25 21:37
閱讀 2733·2019-08-30 15:53
閱讀 3650·2019-08-30 14:07
閱讀 720·2019-08-30 11:07
閱讀 3523·2019-08-29 18:36