博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在spring下获取分类下的所有子类
阅读量:5279 次
发布时间:2019-06-14

本文共 1485 字,大约阅读时间需要 4 分钟。

我们一般使用java的时候更多的时候是获取子类的父类是谁。或者多态的使用具体子类。但是有时候的业务会要求你拿到父类下的所有子类。那么该怎么做呢?

注意:子类不一定在同一个包里。

 

1.在所有的子类上加上自定义注解,全局获取使用自定义注解的类。即为所有的子类。

该方式未使用,但肯定可以实现。暂不做讨论,有机会在后面予以补充。

 

2.在全局类加载的过程里比对 具体的类是否是你父类的子类。

操作方式,获取全局的class文件路径,挨个比对。发现一个存一个,之后即可获得所有子类。但是这种方式在spring下有点浪费。因为spring有类的托管机制。我们把具体的子类交给spring,让其在jvm启动的时候即实例化。使用如下代码:

@Component//监控类 实现BeanPostProcessor接口public class DictDepository implements BeanPostProcessor {	@Override	public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {		return bean;	}	/**	 * 在具体子类初始化之后 确认该对象是否是对应父类(DictCode)的子类	 */	@Override	public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {		// 如实现字典DictCode 则就执行put功能		if (bean instanceof DictCode) {			DictCode dict = (DictCode) bean;			dict.addDict(DictCode.MAPCODE);		}		return bean;	}}

 

3.巧妙通过Spring实现

 

@AutowiredList
checkObjRangeExtendsServiceList;
 如上即可获取接口下的所有实现类

 

4.使用`org.reflections`包

 

4.1 通过接口Reflections reflections = new Reflections("com.yannis.ms.check.service");Set
> annotated = reflections.getSubTypesOf(ICheckObjRangeService.class);for(Class
clazz : annotated){ boolean isAbstract = Modifier.isAbstract(clazz.getModifiers()); if(isAbstract){ }}4.2 通过注解Set
> singletons = reflections.getTypesAnnotatedWith(javax.inject.Singleton.class);

 

  1.  

不过要注意,通过第四种获取到的类为包下所有的子类包含抽象类,但第三种只会拿到具体的实现类

此时 该问题即可解决。

欢迎拍砖。

转载于:https://www.cnblogs.com/pigga/p/10098299.html

你可能感兴趣的文章
生成随机数的模板
查看>>
Mysql 数据库操作
查看>>
转:linux终端常用快捷键
查看>>
UVa 11059 最大乘积
查看>>
数组分割问题求两个子数组的和差值的小
查看>>
composer 报 zlib_decode(): data error
查看>>
hdu 3938 并查集
查看>>
《深入分析Java Web技术内幕》读书笔记之JVM内存管理
查看>>
python之GIL release (I/O open(file) socket time.sleep)
查看>>
软件开发与模型
查看>>
161017、SQL必备知识点
查看>>
kill新号专题
查看>>
MVC学习系列——Model验证扩展
查看>>
字符串
查看>>
vue2.x directive - 限制input只能输入正整数
查看>>
实现MyLinkedList类深入理解LinkedList
查看>>
自定义返回模型
查看>>
C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 客户端多网络支持
查看>>
HDU 4122
查看>>
Suite3.4.7和Keil u3自带fx2.h、fx2regs.h文件的异同
查看>>