一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Spring Bean三種注入方式詳解

Spring Bean三種注入方式詳解

2021-02-01 11:47民團司令 Java教程

本篇文章主要介紹了Spring Bean三種注入方式詳解,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

Spring容器中為一個bean配置依賴注入有三種方式:

  1.  使用屬性的setter方法注入  這是最常用的方式;
  2.  使用構造器注入;
  3.  使用Filed注入(用于注解方式).

Field注入是最常見的一種方式,可以采用 @Autowired 對Bean類的接口進行初始化,代碼如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
@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為其實現類,通過這種方式,可以通過Spring容器初始化NormalCust Bean,進而調用recharge()方法。

構造器注入主要用于某些類因為某種原因不能作為Bean,只是一個普通類??梢酝ㄟ^類的構造方法傳入需要調用的Bean接口。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@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");
  }
  
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
public class ChargeThread implements Runnable {
  
  private Cust cust;
  
  public ChargeThread(Cust cust) {
    this.cust = cust;
  }
 
  public void run() {
    cust.recharge();
  }
 
}

上面的代碼通過初始化一個線程,在初始化的時候傳入Bean,在線程的類中調用Bean的充值方法。構造器注入特別適合多線程的編程,因為線程不能定義為Bean,否則不僅會因為它是一個單例,而且會被Spring容器管理。(當然你可以去定義Bean為原型Bean,能夠有多個副本,脫離Spring容器的管理),最重要的是我們要用線程池,由線程池來管理線程。

還有一種Setter方法注入,這種方式能用于final類的靜態方法,例如有一個充值的Util類,該類是final類,其方法是靜態方法。

?
1
2
3
4
5
6
7
8
9
public class SpringInjectionTest {
  @Test
  public void testSetterInjection() {
    System.out.println("testSetterInjection begin");
    String result = RechargeUtil.InstantRecharge();
    System.out.println("testSetterInjection end, " + result);
  }
 
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@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中。

以上三種注入方式,讀者可以根據實際應用場景靈活選擇。也希望大家多多支持服務器之家。

原文鏈接:http://blog.csdn.net/dotnetstudio/article/details/50781022

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国色天香社区在线视频免费观看 | 毛片啪啪视频 | 日处女b | www.日日操 | 欧美在线欧美 | 欧美日韩视频在线第一区二区三区 | 欧洲另类一二三四区 | fistingvideos头交尿眼 | 四影虎库最新2021 | 精品午夜视频 | 日本人黄色 | 天天干天天色综合网 | 男人天堂bt| 婷婷99视频精品全部在线观看 | 91精品啪在线观看国产线免费 | 久久精品美女 | 动漫美女被吸乳羞羞小说 | 91视频夜色 | 91狠狠| 女人pp被扒开流水了 | 日本加勒比在线精品视频 | 色综合伊人色综合网亚洲欧洲 | 俺去也亚洲色图 | 513热点网| 久久这里只有精品视频e | 视频在线视频免费观看 | 丝瓜视频黄瓜视频 | 543精品视频| 538免费精品视频搬运工 | 欧美日韩一二三区免费视频观看 | 日韩精品视频在线播放 | 午夜精品久久久 | 欧美高清免费一级在线 | 无限资源在线观看播放 | 成人观看免费大片在线观看 | 亚洲国产果果在线播放在线 | 韩国伦理hd| 男人的j进入女人的j免费 | 男人扒开女人下身添 | 人人做人人爽人人爱 | 韩国三级日本三级香港三级黄 |