Spring Bean三種注入方式詳解
在Spring容器中為一個bean配置依賴注入有三種方式:
- 使用屬性的setter方法注入 這是最常用的方式;
- 使用構(gòu)造器注入;
- 使用Filed注入(用于注解方式).
Field注入是最常見的一種方式,可以采用 @Autowired 對Bean類的接口進行初始化,代碼如下
@ContextConfiguration({"/META-INF/spring/amazing-base.xml"}) @RunWith(SpringJUnit4ClassRunner.class) public class SpringInjectionTest { @Autowired private Cust normalCust; @Test public void testFieldInjection() { System.out.println("testFieldInjection begin"); normalCust.recharge(); System.out.println("testFieldInjection end"); } }
Cust為接口,NormalCust為其實現(xiàn)類,通過這種方式,可以通過Spring容器初始化NormalCust Bean,進而調(diào)用recharge()方法。
構(gòu)造器注入主要用于某些類因為某種原因不能作為Bean,只是一個普通類??梢酝ㄟ^類的構(gòu)造方法傳入需要調(diào)用的Bean接口。
@ContextConfiguration({"/META-INF/spring/amazing-base.xml"}) @RunWith(SpringJUnit4ClassRunner.class) public class SpringInjectionTest { @Autowired private Cust normalCust; @Test public void testConstructorInjection() { System.out.println("testConstructorInjection begin"); ChargeThread thread = new ChargeThread(normalCust); thread.run(); System.out.println("testConstructorInjection end"); } }
public class ChargeThread implements Runnable { private Cust cust; public ChargeThread(Cust cust) { this.cust = cust; } public void run() { cust.recharge(); } }
上面的代碼通過初始化一個線程,在初始化的時候傳入Bean,在線程的類中調(diào)用Bean的充值方法。構(gòu)造器注入特別適合多線程的編程,因為線程不能定義為Bean,否則不僅會因為它是一個單例,而且會被Spring容器管理。(當然你可以去定義Bean為原型Bean,能夠有多個副本,脫離Spring容器的管理),最重要的是我們要用線程池,由線程池來管理線程。
還有一種Setter方法注入,這種方式能用于final類的靜態(tài)方法,例如有一個充值的Util類,該類是final類,其方法是靜態(tài)方法。
public class SpringInjectionTest { @Test public void testSetterInjection() { System.out.println("testSetterInjection begin"); String result = RechargeUtil.InstantRecharge(); System.out.println("testSetterInjection end, " + result); } }
@Component public final class RechargeUtil { private RechargeUtil() { } private static Cust normalCust; @Autowired public void setNormalCust(Cust normalCust) { RechargeUtil.normalCust = normalCust; } public static String InstantRecharge() { normalCust.recharge(); return "InstantRecharge Success!"; } }
最后一種方式也成功了將normalCust注入到了RechargeUtil中。
以上三種注入方式,讀者可以根據(jù)實際應用場景靈活選擇。也希望大家多多支持腳本之家。
相關文章
Java在Map轉(zhuǎn)Json字符串時出現(xiàn)"\"轉(zhuǎn)義字符的解決辦法
當一個Map被轉(zhuǎn)成Json字符串后,被添加到另一個Map中,會出現(xiàn)被加上“\”轉(zhuǎn)義字符的情況,這個時候該如何解決呢,下面就來和小編一起了解一下2023-07-07Spring Cloud實現(xiàn)提供API給客戶端的方法詳解
這篇文章主要給大家介紹了關于Spring Cloud實現(xiàn)提供API給客戶端的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。2018-01-01SpringBoot項目攔截器獲取Post方法的請求body實現(xiàn)
本文主要介紹了SpringBoot項目攔截器獲取Post方法的請求body,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01Java 靜態(tài)數(shù)據(jù)初始化的示例代碼
這篇文章主要介紹了Java 靜態(tài)數(shù)據(jù)初始化的示例代碼,幫助大家更好的理解和學習Java,感興趣的朋友可以了解下2020-09-09