Java获取接口所有实现类的方式
有时候,根据业务逻辑的需求,我们想要获取到某个接口的所有实现类。在这里大致介绍两种方式:
1.借助Spring容器实现
Spring作为一个容器,管理着一个项目中所有经过配置的Java类(xml配置文件或Annotation方式)。如果某个接口的所有实现类均被Spring托管了,那么通过Spring就可以很简单的返回这些实现类。
1 import org.springframework.beans.BeansException; 2 import org.springframework.context.ApplicationContext; 3 import org.springframework.context.ApplicationContextAware; 4 import org.springframework.stereotype.Component; 5 6 @Component 7 public class ServiceLocator implements ApplicationContextAware{ 8 /** 9 * 用于保存接口实现类名及对应的类 10 */ 11 private Map<String, IService> map; 12 13 /** 14 * 获取应用上下文并获取相应的接口实现类 15 * @param applicationContext 16 * @throws BeansException 17 */ 18 @Override 19 public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { 20 //根据接口类型返回相应的所有bean 21 Map<String, IService> map = applicationContext.getBeansOfType(IService.class); 22 } 23 24 public Map<String, IService> getMap() { 25 return map; 26 } 27 }
2.借助ServiceLoader类
ServiceLoader是JDK自带的一个类加载器,位于java.util包当中,作为 A simple service-provider loading facility. 具体使用方式如下:
1.在META-INF/services/目录下用你的接口全路径名称命名一个文件(不加后缀),然后在该文件中一行一个添加你的接口实现类的全路径名。
2.通过load方法来加载出所有的接口实现类
1 ServiceLoader<MyInterface> loader = ServiceLoader.load(MyInterface.class);
在这里load方法的返回值是一个迭代器,用这个迭代器可以遍历出所有的接口实现类。
总结
以上两种方式,实现的功能都是一样的,实现方式不同,底层用的技术一样的,都是反射。至于选择哪一种,我建议如果项目中的接口实现类都被Spring托管了,那当然是直接用Spring了。如果没有用到Spring的话,那就用ServiceLoader,这个肯定是没有问题的。
转载于:https://www.cnblogs.com/heaveneleven/p/9125228.html
Java获取接口所有实现类的方式相关推荐
- java获取IP地址和MAC地址方式
java获取IP地址和MAC地址方式 前端和后台都可以获取 ip获取方式比较简单,就不做分析了,主要说mac的获取 前端获取的方式与局限性:尝试好几种方式,这种是最易实现.最简单的方式,确实能获取该浏 ...
- java 获取接口的注解_java反射注解妙用-获取所有接口说明
前言 最近在做项目权限,使用shiro实现restful接口权限管理,对整个项目都进行了重构.而权限管理需要用到所有的接口配置,包括接口url地址,接口唯一编码等.想要收集所有的接口信息,如果工程接口 ...
- java获取反射机制的三种方式
更多免费教学文章请关注这里 java 获取反射常使用的三种方式: 1.通过new对象实现反射机制 2.通过路径实现反射机制 3.通过类名实现反射机制 通过Object类的getClass方法来获取 使 ...
- Java获取当前时间的四种方式
面试时被问到如何获取系统当前时间,平时没有怎么注意这个问题,这里整理一下 import java.text.SimpleDateFormat; import java.util.Calendar; i ...
- Java容器接口及其实现类(JCF)
参考文章,官方文档 Java容器接口分为两个部分,一个是最基础的接口 java.util.Collection,另一部分接口是基于java.util.Map 继承Collection的接口 java. ...
- java面向对象 接口和实现类_类实现java面向对象上:接口
最近应用开发的过程中出现了一个小问题,顺便记录一下原因和方法--类实现 10.接口: 接口的设计: 1.应用接口处理多继承: 2.应用接口为外部类添加功能: ...
- java获取接口数据类型_java中调用第三方接口获取数据的方式
//get请求方式 private String getInfo(Map params,String URL) { // 创建Httpclient对象 CloseableHttpClient http ...
- 【Email】Java发送邮件接口与配置类
说明 这文章17年的,不知道为啥,被放到草稿箱了.现在发表下. 转载请注明出处:http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] 可能最近写博客时间不 ...
- Java 获取当前项目的类路径
转载自 http://www.wolfbe.com/detail/201609/360.html# 摘要:web项目与普通Java项目获取类路径的方式有点不一样,因为web项目获取的是运行容器所在的路 ...
最新文章
- 第十六届全国大学生智能车竞赛华南赛区竞赛事宜的通知
- python画图代码彩虹-用python画一颗彩虹色爱心送给女朋友!!!
- HTML/CSS学习笔记02【表单标签】
- 6、jeecg 笔记之 自定义excel 模板导出(一)
- 计算机专业在湖南录取分数,计算机科学与技术专业分数线各大学排名(湖南)
- “砸7000万,这样的黑锅我们也不背。” 华人银行家的反击
- css怎么使用gpu加速,用CSS3开启GPU硬件加速来提升网站的动画渲染性能
- LeetCode(566)——重塑矩阵(JavaScript)
- 算法学习三:使用霍纳规则计算多项式
- Linux 安装python 模块及库
- opengl编程指南第9版源码编译注意事项
- CSC 命令编译cs文件
- 【播放器】媒体播放器三大架构
- IOT漏洞挖掘学习笔记(一)——堆基础及相关数据结构
- 统计自然语言处理梳理二:句法分析
- Java语言之父James Gosling
- Memwatch简介
- 人民币大写在线转换工具
- ZUCC_计算机网络实验_实验04 VLAN配置
- LCA(包含RMQ)
热门文章
- realtime multi-person 2D pose estimation using part affinity fields
- PDE8 wave equation: derivation
- php表格批量修改数据,php批量修改数据库表名前缀
- Python自然语言处理相,新词发现,主题模型,隐马尔模型词性标注,Word2Vec,情感分析...
- php长链接要配置,PHP链接到配置文件页面。 ?id =
- java里面比较重要的东西_Java面向对象程序设计中很重要的一些东西
- max std value 宏_【转载】:【C++跨平台系列】解决STL的max()与numeric_limits::max()和VC6 min/max 宏冲突问题...
- mysql前179天_做up主179天的经历
- 常见的php后门,有趣的PHP后门
- R-数据挖掘 | 聚类分析中的各种相异(似)度计算