欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring多對(duì)象引入方法

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

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

在SpringBoot中, 可以使用@Resource和@Autowried注解進(jìn)行注入.

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

@Autowried, 則會(huì)在容器中尋找匹配的對(duì)象, 如果找到則注入成功, 如果沒找到或者找到多個(gè), 則會(huì)報(bào)錯(cuò).

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

1.創(chuàng)建Bean

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

@Bean(name="別名")

代碼樣例:

注意

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

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

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

源碼:

@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();
  }
}

測(cè)試代碼:

@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使用類注解進(jìn)行注入對(duì)象. @Service, @Component,添加value值進(jìn)行創(chuàng)建別名.

// 創(chuàng)建接口
public interface IBeanService {
  public void printInfo();
}
//創(chuàng)建實(shí)例01, 并且添加上@Primary注解, 表名默認(rèn)使用這個(gè)類
@Service(value = "bean01")
@Primary
public class Bean01Service implements IBeanService {
  @Override
  public void printInfo() {
    System.out.println("This is bean 01");
  }
}
//創(chuàng)建實(shí)例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.如果需要?jiǎng)?chuàng)建局部變量,  使用applicationContext.getBean(class/name)創(chuàng)建

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

applicationContext.getBean(IBeanService.class)

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

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

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

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

@Autowired
IBeanService beanService;

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

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

總結(jié)

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

相關(guān)文章

  • java Lambda表達(dá)式的使用心得

    java Lambda表達(dá)式的使用心得

    這篇文章主要介紹了java Lambda表達(dá)式的使用心得,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • java實(shí)現(xiàn)字符串反轉(zhuǎn)

    java實(shí)現(xiàn)字符串反轉(zhuǎn)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)字符串反轉(zhuǎn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • java中的SpringBoot框架

    java中的SpringBoot框架

    這篇文章主要介紹了java學(xué)習(xí)之SpringBoot框架,文章基于Java的相關(guān)資料展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-04-04
  • 使用JSON.toJSONString格式化成json字符串時(shí)保留null屬性

    使用JSON.toJSONString格式化成json字符串時(shí)保留null屬性

    這篇文章主要介紹了使用JSON.toJSONString格式化成json字符串時(shí)保留null屬性,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • java 內(nèi)部類的詳解及實(shí)例

    java 內(nèi)部類的詳解及實(shí)例

    這篇文章主要介紹了 java 內(nèi)部類的詳解及實(shí)例的相關(guān)資料,這里提供了兩種內(nèi)部類的實(shí)現(xiàn)方法,并給出實(shí)例,需要的朋友可以參考下
    2017-08-08
  • linux用java -jar啟動(dòng)jar包緩慢的問題

    linux用java -jar啟動(dòng)jar包緩慢的問題

    這篇文章主要介紹了linux用java -jar啟動(dòng)jar包緩慢的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,
    2023-09-09
  • 深入解析Java中反射中的invoke()方法

    深入解析Java中反射中的invoke()方法

    最近復(fù)習(xí)了一下Java反射的使用,正好了解一下Java中反射中的invoke()方法,稍微整理精簡(jiǎn)一下做下分享,感興趣的可以了解一下
    2021-06-06
  • springboot支持https請(qǐng)求的實(shí)現(xiàn)

    springboot支持https請(qǐng)求的實(shí)現(xiàn)

    本文主要介紹了springboot支持https請(qǐng)求的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • bootstrap實(shí)現(xiàn)多個(gè)下拉框同時(shí)搜索的實(shí)例

    bootstrap實(shí)現(xiàn)多個(gè)下拉框同時(shí)搜索的實(shí)例

    下面小編就為大家?guī)?lái)一篇bootstrap實(shí)現(xiàn)多個(gè)下拉框同時(shí)搜索的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • SpringBoot如何IDEA中實(shí)現(xiàn)熱部署

    SpringBoot如何IDEA中實(shí)現(xiàn)熱部署

    這篇文章主要介紹了SpringBoot如何IDEA中實(shí)現(xiàn)熱部署,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04

最新評(píng)論