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