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

Java獲取接口所有實現(xiàn)類的方式詳解

 更新時間:2019年12月26日 15:46:33   作者:heaven夏  
這篇文章主要介紹了Java獲取接口所有實現(xiàn)類的方式詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

有時候,根據(jù)業(yè)務(wù)邏輯的需求,我們想要獲取到某個接口的所有實現(xiàn)類。在這里大致介紹兩種方式:

1.借助Spring容器實現(xiàn)

Spring作為一個容器,管理著一個項目中所有經(jīng)過配置的Java類(xml配置文件或Annotation方式)。如果某個接口的所有實現(xiàn)類均被Spring托管了,那么通過Spring就可以很簡單的返回這些實現(xiàn)類。

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

@Component
public class ServiceLocator implements ApplicationContextAware{
  /**
   * 用于保存接口實現(xiàn)類名及對應(yīng)的類
   */
  private Map<String, IService> map;

  /**
   * 獲取應(yīng)用上下文并獲取相應(yīng)的接口實現(xiàn)類
   * @param applicationContext
   * @throws BeansException
   */
  @Override
  public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    //根據(jù)接口類型返回相應(yīng)的所有bean
    Map<String, IService> map = applicationContext.getBeansOfType(IService.class);
  }

  public Map<String, IService> getMap() {
    return map;
  }
}

2.借助ServiceLoader類

ServiceLoader是JDK自帶的一個類加載器,位于java.util包當(dāng)中,作為 A simple service-provider loading facility. 具體使用方式如下:

1.在META-INF/services/目錄下用你的接口全路徑名稱命名一個文件(不加后綴),然后在該文件中一行一個添加你的接口實現(xiàn)類的全路徑名。

2.通過load方法來加載出所有的接口實現(xiàn)類

ServiceLoader<MyInterface> loader = ServiceLoader.load(MyInterface.class);

在這里load方法的返回值是一個迭代器,用這個迭代器可以遍歷出所有的接口實現(xiàn)類。

總結(jié)

以上兩種方式,實現(xiàn)的功能都是一樣的,實現(xiàn)方式不同,底層用的技術(shù)一樣的,都是反射。至于選擇哪一種,我建議如果項目中的接口實現(xiàn)類都被Spring托管了,那當(dāng)然是直接用Spring了。如果沒有用到Spring的話,那就用ServiceLoader,這個肯定是沒有問題的。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java運算符>、>>、>>>三者的區(qū)別

    Java運算符>、>>、>>>三者的區(qū)別

    這篇文章主要介紹了Java運算符>、>>、>>>三者的區(qū)別,做了一個簡單的對比,并用實例說明,需要的朋友可以參考下
    2014-06-06
  • 一起來學(xué)習(xí)JAVA的運算符

    一起來學(xué)習(xí)JAVA的運算符

    這篇文章主要為大家詳細介紹了JAVA的運算符,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • Java中的ZooKeeper使用

    Java中的ZooKeeper使用

    本文主要介紹了Java中的ZooKeeper使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • Java Collection集合iterator方法解析

    Java Collection集合iterator方法解析

    這篇文章主要介紹了Java Collection集合iterator方法解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • SpringBoot集成Access?DB實現(xiàn)數(shù)據(jù)導(dǎo)入和解析

    SpringBoot集成Access?DB實現(xiàn)數(shù)據(jù)導(dǎo)入和解析

    microsoft?office?access是由微軟發(fā)布的關(guān)聯(lián)式數(shù)據(jù)庫管理系統(tǒng),它結(jié)合了?microsoft?jet?database?engine?和?圖形用戶界面兩項特點,是一種關(guān)系數(shù)據(jù)庫工具,本文給大家介紹了SpringBoot集成Access?DB實現(xiàn)數(shù)據(jù)導(dǎo)入和解析,需要的朋友可以參考下
    2024-11-11
  • 解決SpringBoot啟動報錯:Failed?to?load?property?source?from?location?'classpath:/application.yml'問題

    解決SpringBoot啟動報錯:Failed?to?load?property?source?from?l

    這篇文章主要介紹了解決SpringBoot啟動報錯:Failed?to?load?property?source?from?location?'classpath:/application.yml'問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • Springboot+Stomp協(xié)議實現(xiàn)聊天功能

    Springboot+Stomp協(xié)議實現(xiàn)聊天功能

    本示例實現(xiàn)一個功能,前端通過websocket發(fā)送消息給后端服務(wù),后端服務(wù)接收到該消息時,原樣將消息返回給前端,前端技術(shù)棧html+stomp.js,后端SpringBoot,需要的朋友可以參考下
    2024-02-02
  • springmvc學(xué)習(xí)筆記-返回json的日期格式問題的解決方法

    springmvc學(xué)習(xí)筆記-返回json的日期格式問題的解決方法

    本篇文章主要介紹了springmvc學(xué)習(xí)筆記-返回json的日期格式問題的解決方法,解決了日期格式的輸出,有興趣的可以了解一下。
    2017-01-01
  • Java中s.charAt(index)用于提取字符串s中的特定字符操作

    Java中s.charAt(index)用于提取字符串s中的特定字符操作

    這篇文章主要介紹了Java中s.charAt(index)用于提取字符串s中的特定字符操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • IDEA配置Maven并版本統(tǒng)一管理的實現(xiàn)

    IDEA配置Maven并版本統(tǒng)一管理的實現(xiàn)

    本文主要介紹了IDEA配置Maven并版本統(tǒng)一管理的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09

最新評論

甘德县| 阿坝| 巴马| 镶黄旗| 界首市| 赞皇县| 建昌县| 峡江县| 渭源县| 定日县| 濮阳县| 通化市| 如东县| 交口县| 敖汉旗| 固始县| 美姑县| 天柱县| 临高县| 孝昌县| 临沧市| 宁夏| 香格里拉县| 仪征市| 陇西县| 桐梓县| 平顶山市| 罗定市| 清新县| 伊春市| 岚皋县| 景洪市| 周至县| 苍溪县| 乐东| 汝南县| 小金县| 东丽区| 虎林市| 公安县| 雅安市|