Java 获取接口所有实现类
来源:互联网 发布:知轩藏书网 编辑:程序博客网 时间:2024/06/16 08:27
利用Spring的Bean工厂,获取接口所有实现类。
前言
在学习Spring Boot 集成RabbitMQ时,发现定义了好几个bean,这些bean在什么地方用到呢?
查看RabbitAdmin
源码发现,这些Bean是在调用initialize()
的时候会用到。会加载所有的Exchange
、Queue
、Binding
的所有实现类。
正好有个项目,需要获取接口的所有实现,参考initialize()
来获取接口的所有实现类。
实现
定义接口
public interface JobAware extends Job{}
接口实现类
@Componentpublic class Job4 implements JobAware { @Override public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("This is Job4"); }}
@Componentpublic class Job5 implements JobAware { @Override public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("This is test for Job5"); }}
注意以上实现必须定义为bean,这样才会加入到Spring的bean容器中去,才可以通过类型获取到所有的实现。
获取实现类
@Componentpublic class JobAdmin implements CommandLineRunner,ApplicationContextAware { private volatile ApplicationContext applicationContext; @Override public void run(String... strings) throws Exception { init(); } public void init(){ Collection<JobAware> jobList=new LinkedList<>(this.applicationContext.getBeansOfType(JobAware.class).values()); for (JobAware jobAware:jobList){ System.out.println(jobAware.getClass().getName()); } } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext=applicationContext; }}
为便于调试,实现CommandLineRunner
接口。
测试
其他实现
通过接口获取所有实现类以及通过注解获取实现类的思路,作者的这种方式也是可以的,不过局限在于实现类和接口必须在同一个package内。
阅读全文
0 0
- Java 获取接口所有实现类
- java反射获取某接口的所有实现类
- Java根据包名获取指定接口的所有实现
- JAVA-获取实现了指定接口类的所有实现类或继承了指定类的所有子类
- JAVA获取同一路径下所有子类或接口实现类
- JAVA获取同一路径下所有子类或接口实现类
- JAVA获取同一路径下所有子类或接口实现类
- JAVA获取同一路径下所有子类或接口实现类
- JAVA获取同一路径下所有子类或接口实现类
- JAVA获取同一路径下所有子类或接口实现类
- JAVA获取同一路径下所有子类或接口实现类
- Java动态获取某个接口下所有的实现类对象集合
- 获取实现某个接口的所有实现类集合
- JAVA获取所有接口的实现类或父类的所有子类(同路径下)
- JAVA获取所有接口的实现类或父类的所有子类(同路径下)
- 通过接口获取所有实现类——续
- 通过接口获取所有实现类以及通过注解获取实现类的思路
- java中,一个类实现某个接口,必须重写接口中的所有方法吗???
- zookeeper-3.4.9安装时,启动正常,但是zkServer.sh status查看出
- Qt的读文件,json解析的操作和主界面的跳转(四)
- 布局优化
- [字典树] Codeforces 557E Ann and Half-Palindrome
- 2.1.6锁重入(支持继承锁)
- Java 获取接口所有实现类
- MFC函数汇总
- 显示时间
- 双六问题(扩展欧几里得模板)
- 实验二——静态链表
- vs(visual studio)2013无法启动IIS Expres Web服务器,解决办法
- 运行selenium时报错:Unsupported major.minor version 52.0
- Java泛型基础知识第二部分整理
- 5.flask开发(1)virtualenv