最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring多對象引入方法

 更新時間:2019年01月30日 11:47:05   作者:裴星宙  
今天小編就為大家分享一篇關(guān)于Spring多對象引入方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

在以前使用xml配置注入的時候, 可以通過name名稱注入, 也可以使用type類型注入.

在SpringBoot中, 可以使用@Resource和@Autowried注解進行注入.

@Resource 默認(rèn)會使用名稱進行注入,  如果找不到, 會使用自動使用類型進行注入.

@Autowried, 則會在容器中尋找匹配的對象, 如果找到則注入成功, 如果沒找到或者找到多個, 則會報錯.

但是, 如果有多個的情況下, 可以使用@Qualifier("別名") 進行約束.

1.創(chuàng)建Bean

1.1如果使用方法bean注入對象, 給@Bean添加name值.

@Bean(name="別名")

代碼樣例:

注意

下面的@Bean(name = "test01DataSource"), 可以使用applicationContext.getBean("test01DataSource") 進行獲取.

@Primary表示 如果以type類型進行選擇的話, 首選該Bean.

也即是說,使用applicationContext.getBean(DataSource.class) 和applicationContext.getBean("test01DataSource") 獲取到的是同一個對象.

源碼:

@Configuration
public class DataSourceConfig {
  @Bean(name = "test01DataSource")
  @Primary
  @ConfigurationProperties(prefix = "spring.datasource.test01")
  public DataSource getTest01DataSource() {
    return DataSourceBuilder.create().build();
  }
  @Bean(name = "test02DataSource")
  @ConfigurationProperties(prefix = "spring.datasource.test02")
  public DataSource test02DataSource() {
    return DataSourceBuilder.create().build();
  }
}

測試代碼:

@Autowired
ApplicationContext applicationContext;
@Test
public void testDataSourceHashCode() {
  System.out.println(applicationContext.getBean(DataSource.class).hashCode());
  System.out.println((applicationContext.getBean("test01DataSource")).hashCode());
  System.out.println((applicationContext.getBean("test02DataSource")).hashCode());
}

結(jié)果樣例:

1105282397
1105282397
793657559

1.2使用類注解進行注入對象. @Service, @Component,添加value值進行創(chuàng)建別名.

// 創(chuàng)建接口
public interface IBeanService {
  public void printInfo();
}
//創(chuàng)建實例01, 并且添加上@Primary注解, 表名默認(rèn)使用這個類
@Service(value = "bean01")
@Primary
public class Bean01Service implements IBeanService {
  @Override
  public void printInfo() {
    System.out.println("This is bean 01");
  }
}
//創(chuàng)建實例02,
@Service(value = "bean02")
public class Bean02Service implements IBeanService {
  @Override
  public void printInfo() {
    System.out.println("This is bean 02");
  }
}
@RunWith(SpringRunner.class)
@SpringBootTest
public class IBeanServiceTest {
  @Autowired
  ApplicationContext applicationContext;
// create default bean.
  @Autowired
  IBeanService beanService;
  @Autowired
  @Qualifier("bean01")
  IBeanService bean01Service;
  @Autowired
  @Qualifier("bean02")
  IBeanService bean02Service;
  @Test
  public void printInfo() {
  // create bean01
    IBeanService bean01 = (IBeanService) applicationContext.getBean("bean01");
  // create bean02
    IBeanService bean02 = (IBeanService) applicationContext.getBean("bean02");
    bean01.printInfo();
    bean02.printInfo();
  // create default bean, and it is bean01
    applicationContext.getBean(IBeanService.class).printInfo();
  }
  @Test
  public void printInfoThroughAutowired() {
    beanService.printInfo();
    bean01Service.printInfo();
    bean02Service.printInfo();
  }
}

2.調(diào)用

2.1.如果需要創(chuàng)建局部變量,  使用applicationContext.getBean(class/name)創(chuàng)建

對于有@Primary的對象, 直接使用getBean(class)進行調(diào)用.

applicationContext.getBean(IBeanService.class)

對于其他的Bean, 使用getBean(name)進行調(diào)用, 并進行類型強制轉(zhuǎn)換.

eg. (IBeanService) applicationContext.getBean("bean02");

2.2.如果需要創(chuàng)建成員變量, 使用@Autowired和 @Qualifier("別名") 進行

對于有@Primary的對象, 直接使用@Autowired進行調(diào)用.代碼如下

@Autowired
IBeanService beanService;

對于其他的bean, 通過添加@Qualifier("別名")進行調(diào)用, 代碼如下

@Autowired
@Qualifier("bean02")
IBeanService bean02Service;

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • 一文詳解Java閉鎖和柵欄的實現(xiàn)

    一文詳解Java閉鎖和柵欄的實現(xiàn)

    閉鎖與柵欄是在多線程編程中的概念,因為在多線程中,我們不能控制線程的執(zhí)行狀態(tài),所以給線程加鎖,讓其按照我們的想法有秩序的執(zhí)行。本文將詳解Java閉鎖和柵欄的實現(xiàn),需要的可以參考一下
    2022-06-06
  • java寫的偽微信紅包功能示例代碼

    java寫的偽微信紅包功能示例代碼

    這篇文章主要介紹了java寫的偽微信紅包功能示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Spring事務(wù)失效的8大原因詳解

    Spring事務(wù)失效的8大原因詳解

    這篇文章主要介紹了Spring事務(wù)失效的8大原因詳解,這里以 MySQL 為例,其 MyISAM 引擎是不支持事務(wù)操作的,InnoDB 才是支持事務(wù)的引擎,一般要支持事務(wù)都會使用 InnoDB,需要的朋友可以參考下
    2023-09-09
  • 通過實例解析Spring argNames屬性

    通過實例解析Spring argNames屬性

    這篇文章主要介紹了通過實例解析Spring argNames屬性,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • SpringBoot整合Drools的實現(xiàn)步驟

    SpringBoot整合Drools的實現(xiàn)步驟

    Drools是一個易于訪問企業(yè)策略、易于調(diào)整以及易于管理的開源業(yè)務(wù)規(guī)則引擎,符合業(yè)內(nèi)標(biāo)準(zhǔn),速度快、效率高。業(yè)務(wù)分析師或?qū)徍巳藛T可以利用它輕松查看業(yè)務(wù)規(guī)則,從而檢驗是否已編碼的規(guī)則執(zhí)行所需的業(yè)務(wù)規(guī)則。本文將講述SpringBoot整合Drools的步驟
    2021-05-05
  • Java打包工具jar包詳解

    Java打包工具jar包詳解

    這篇文章主要介紹了Java打包工具jar包詳解,在本例中我們引入一個叫jaxen.jar的庫,并將所有以”org.jaxen”開頭的類重命名以”org.example.jaxen”開頭,具體實例代碼跟隨小編一起看看吧
    2021-10-10
  • Java 線程池詳解及創(chuàng)建簡單實例

    Java 線程池詳解及創(chuàng)建簡單實例

    這篇文章主要介紹了Java 線程池詳解及創(chuàng)建簡單實例的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Java map.getOrDefault()方法的用法詳解

    Java map.getOrDefault()方法的用法詳解

    這篇文章主要介紹了Java map.getOrDefault()方法的用法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 在springboot中如何使用線程池

    在springboot中如何使用線程池

    在SpringBoot中,可以通過定義ThreadPoolTaskExecutor的Bean并使用@Autowired注入來使用線程池,具體步驟包括創(chuàng)建ThreadPoolTaskExecutor的Bean配置,本文給大家介紹springboot使用線程池的例子,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • Java 可視化垃圾回收_動力節(jié)點Java學(xué)院整理

    Java 可視化垃圾回收_動力節(jié)點Java學(xué)院整理

    Ben Evans是一名資深培訓(xùn)師兼顧問,他在演講可視化垃圾回收中從基礎(chǔ)談起討論了垃圾回收。以下是對其演講的簡短總結(jié)。感興趣的朋友一起學(xué)習(xí)吧
    2017-05-05

最新評論

柘荣县| 武清区| 伊川县| 花莲市| 金阳县| 玉林市| 迁西县| 通州区| 基隆市| 墨竹工卡县| 鱼台县| 汕尾市| 响水县| 房产| 尼玛县| 无棣县| 武清区| 忻城县| 长丰县| 军事| 东至县| 兴仁县| 正蓝旗| 安陆市| 于田县| 蒙城县| 阳新县| 洛扎县| 积石山| 临安市| 新野县| 双流县| 沙坪坝区| 阿拉善盟| 芦溪县| 河南省| 宜黄县| 周口市| 新乡市| 洪湖市| 惠东县|