激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語言 - JAVA教程 - spring如何動(dòng)態(tài)指定具體實(shí)現(xiàn)類

spring如何動(dòng)態(tài)指定具體實(shí)現(xiàn)類

2020-06-22 12:40登頂 JAVA教程

這篇文章主要為大家詳細(xì)介紹了spring如何動(dòng)態(tài)指定具體實(shí)現(xiàn)類,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

在寫接口實(shí)現(xiàn)時(shí),有時(shí)會(huì)有多個(gè)實(shí)現(xiàn)類。這篇文章介紹在調(diào)用時(shí)通過傳入字符串來指定具體的實(shí)現(xiàn)類。

一.接口與實(shí)現(xiàn)類:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// 接口
public interface ServiceInterface {
  public void method();
}
 
// 具體兩個(gè)實(shí)現(xiàn)類
@Service("aService")
public class AServiceImpl implements ServiceInterface {
 
  @Override
  public void method() {
    System.out.println("the impl is A");
  }
 
  @Override
  public String toString() {
    return "A";
  }
}
 
@Service("bService")
public class BServiceImpl implements ServiceInterface {
 
  @Override
  public void method() {
    System.out.println("the impl is B");
  }
   
  @Override
  public String toString() {
    return "B";
  }
 
}

在實(shí)現(xiàn)類中重寫了toString() 方法,可以自定義字符串,當(dāng)調(diào)用時(shí)傳入指定的字符串就能獲取到相應(yīng)的bean。 

二.register書寫:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
@Service("register")
public class Register implements InitializingBean, ApplicationContextAware {
  private Map<String, ServiceInterface> serviceImplMap = new HashMap<>();
  private ApplicationContext applicationContext;
 
  // 獲取spring的上下文
  @Override
  public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    this.applicationContext = applicationContext;
  }
 
  // 獲取接口實(shí)現(xiàn)類的所有bean,并按自己定的規(guī)則放入map中
  @Override
  public void afterPropertiesSet() throws Exception {
    Map<String, ServiceInterface> beanMap = applicationContext.getBeansOfType(ServiceInterface.class);
    // 以下代碼是將bean按照自己定的規(guī)則放入map中,這里我的規(guī)則是key:service.toString();value:bean
    // 調(diào)用時(shí),參數(shù)傳入service.toString()的具體字符串就能獲取到相應(yīng)的bean
    // 此處也可以不做以下的操作,直接使用beanMap,在調(diào)用時(shí),傳入bean的名稱
    for (ServiceInterface serviceImpl : beanMap.values()) {
      serviceImplMap.put(serviceImpl.toString(), serviceImpl);
    }
  }
   
  public ServiceInterface getServiceImpl(String name) {
    return serviceImplMap.get(name);
  }
 
}

三.測試類:

?
1
2
3
4
5
6
7
8
9
10
@Resource
Register register;
 
@Test
public void testService() {
  ServiceInterface service = register.getServiceImpl("A");
  service.method();
  ServiceInterface service2 = register.getServiceImpl("B");
  service2.method();
}

運(yùn)行結(jié)果,如圖:

spring如何動(dòng)態(tài)指定具體實(shí)現(xiàn)類

備注:

在spring加載后,獲取applicationContext的方法:

實(shí)現(xiàn)ApplicationContextAware接口的Bean,在Bean加載的過程中可以獲取到Spring的ApplicationContext,這個(gè)尤其重要,ApplicationContext是Spring應(yīng)用上下文,從ApplicationContext中可以獲取包括任意的Bean在內(nèi)的大量Spring容器內(nèi)容和信息

?
1
2
3
4
5
6
7
8
9
10
@Component("informerRegistry")
public final class InformerRegistry implements ApplicationContextAware{
 
  private ApplicationContext applicationContext;
 
  @Override
  public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    this.applicationContext = applicationContext;
  }
}

關(guān)于spring常用bean擴(kuò)展接口可參考:http://www.cnblogs.com/xrq730/p/5721366.html 

注意:

使用以下方法獲取spring上下文時(shí),會(huì)啟動(dòng)spring。多次寫以下方法,就會(huì)啟動(dòng)多個(gè)spring容器

復(fù)制代碼 代碼如下:
ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:META-INF/spring/*.xml");

 

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 一男一女一级毛片 | 日韩毛片一区二区三区 | 国产色91 | 99爱视频| 欧美成人做爰高潮片免费视频 | 久久精品视频黄色 | 欧美国产一区二区三区 | 国产免费小视频在线观看 | 欧美大荫蒂xxx| 一级毛片免费高清视频 | 欧美一级理论 | 欧美一级全黄 | 在线播放污 | 久久成人免费观看 | 日本精品久久久一区二区三区 | 国产日韩三区 | 国产瑟瑟视频 | 久久精品国产一区二区 | 欧美无限资源 | 亚洲国产精品久久久久制服红楼梦 | 他也色在线视频 | 日韩精品一二区 | 精品成人在线观看 | 久久17 | 激情视频免费看 | 国产在线精品一区二区三区不卡 | 久草在线综合网 | 日本一区二区精品 | 一区二区美女视频 | 国产高清自拍一区 | 成人免费看片a | 色女生影院 | 亚洲va在线 | 成人一级黄色片 | 色日本视频 | 草莓视频久久 | 国产精品午夜性视频 | 亚洲午夜电影 | 精品久久久久久久久久久αⅴ | 欧美日韩在线播放 | 国产羞羞视频在线观看免费应用 |