java反射之获取类或接口上的所有方法及其注解(包括实现的接口上的注解)

    /**
* 获取类或接口上的所有方法及方法上的注解(包括方法实现上的注解以及接口上的注解),最完整的工具类,没有现成的工具类
*
* @param clz
* @param clzFilter
* 仅返回具有指定类注解的类或接口中的方法,默认不过滤
* @param methodFilter
* 仅返回具有指定方法注解的方法,默认不过滤。 一般使用类或方法即可,没有必要同时两者
* @param includeObject
* 是否包括Object上定义的方法,默认false
* @param println
* 是否打印,默认不打印
* @return
*/
public static Map<Method, Set<String>> getMethodsAndAnnotations(Class clz, Set<Annotation> clzFilter,
Set<Annotation> methodFilter, boolean includeObject, boolean println) {
Map<Method, Set<String>> result = new ConcurrentHashMap<Method, Set<String>>();
Method[] methods = null;
if (includeObject) {
methods = clz.getMethods();
} else {
methods = clz.getDeclaredMethods();
} for (Method method : methods) {
Annotation[] annotations = method.getAnnotations();
result.putIfAbsent(method, new HashSet<>());
for (Annotation annotation : annotations) {
result.get(method).add(annotation.annotationType().getCanonicalName());
}
} Class[] interfaces = clz.getInterfaces();
for (int i = 0; i < interfaces.length; i++) {
for (Method method : interfaces[i].getDeclaredMethods()) {
Annotation[] annotations = method.getAnnotations();
result.putIfAbsent(method, new HashSet<>());
for (Annotation annotation : annotations) {
result.get(method).add(annotation.annotationType().getCanonicalName());
}
}
} if (println) {
System.out.println("=============");
for (Entry<Method, Set<String>> method : result.entrySet()) {
System.out.print(method.getKey().toString() + ":[");
for (String annotation : method.getValue()) {
System.out.print("" + annotation);
}
System.out.println("]");
}
System.out.println("=============");
}
return result;
} public static Map<String, Set<String>> getMethodNameAndAnnotationName(Class clz, Set<Annotation> clzFilter,
Set<Annotation> methodFilter, boolean includeObject, boolean println) {
Map<String, Set<String>> result = new HashMap<>();
Map<Method, Set<String>> tMap = getMethodsAndAnnotations(clz, clzFilter, methodFilter, includeObject, println);
for (Entry<Method, Set<String>> method : tMap.entrySet()) {
result.putIfAbsent(method.getKey().getName(),method.getValue());
result.get(method.getKey().getName()).addAll(method.getValue());
}
return result;
} /**
* 判断某个类的某个方法上是否具有某个注解
* @param clz
* @param method
* @param class1
* @return
*/
public static boolean methodHasAnnotation(Class clz, Method method,Class anno) {
return getMethodNameAndAnnotationName(clz, null, null, false, false).get(method.getName()).contains(anno.getName());
}
    public static void main(String[] args) {
TaMethodUtil.getMethodsAndAnnotations(BonusAuditResultServiceImpl.class,null,null,false,true);
// TaMethodUtil.getMethodsAndAnnotations(BonusAuditResultService.class,null,null,false,true);
}
-- 类定义
public class BonusAuditResultServiceImpl extends BusinessService implements BonusAuditResultService, InitializingBean { @Transactional
@Override
public ResultModel<Integer> delete(TaBaseParameter<String> param) {
DBContextHolder.setTargetDataSource("default");
AgencyInfo agencyInfo = new AgencyInfo();
...
}
}
-- 接口定义
public interface BonusAuditResultService {
/**
* 查询分红明细稽核结果
*
* @param dto
* @return
*/
@CloudFunction(desc = "查询分红明细稽核结果")
public ResultModel<List<BonusAuditResult>> queryBonusAuditResult(BonusAuditResultQueryDto dto); @CloudFunction(desc = "XA事务插入")
ResultModel<Integer> insert(TaBaseParameter<AgencyInfo> param);
}

测试结果输出:

=============
public ResultModel auditresult.service.BonusAuditResultServiceImpl.insertNonXATrans():[org.springframework.transaction.annotation.Transactional]
public void auditresult.service.BonusAuditResultServiceImpl.afterPropertiesSet() throws java.lang.Exception:[]
public abstract ResultModel auditresult.api.BonusAuditResultService.insertNShard():[common.annotation.CloudFunction]
public ResultModel auditresult.service.BonusAuditResultServiceImpl.queryCrossShardWithBroadcast():[org.springframework.transaction.annotation.Transactional]
public abstract ResultModel auditresult.api.BonusAuditResultService.insertOneShard():[common.annotation.CloudFunction]
public abstract ResultModel auditresult.api.BonusAuditResultService.insertNonXATrans():[common.annotation.CloudFunction]
public abstract ResultModel auditresult.api.BonusAuditResultService.queryCrossShardWithBroadcast():[common.annotation.CloudFunction]
public ResultModel auditresult.service.BonusAuditResultServiceImpl.insertNShard():[org.springframework.transaction.annotation.Transactional]
public ResultModel auditresult.service.BonusAuditResultServiceImpl.insertOneShard():[org.springframework.transaction.annotation.Transactional]
public ResultModel auditresult.service.BonusAuditResultServiceImpl.insertNonXAAutoTrans():[org.springframework.transaction.annotation.Transactional]
public ResultModel auditresult.service.BonusAuditResultServiceImpl.queryByHint():[org.springframework.transaction.annotation.Transactional]
public abstract ResultModel auditresult.api.BonusAuditResultService.insertNonXAAutoTrans():[common.annotation.CloudFunction]
public abstract ResultModel auditresult.api.BonusAuditResultService.queryByHint():[common.annotation.CloudFunction]
public abstract ResultModel auditresult.api.BonusAuditResultService.queryAllShardAggr():[common.annotation.CloudFunction]
public ResultModel auditresult.service.BonusAuditResultServiceImpl.insertMultiDSWithNShard():[org.springframework.transaction.annotation.Transactional]
public ResultModel auditresult.service.BonusAuditResultServiceImpl.insertMultiDSWithNShardButOneFailed():[org.springframework.transaction.annotation.Transactional]
public ResultModel auditresult.service.BonusAuditResultServiceImpl.queryOneShard():[org.springframework.transaction.annotation.Transactional]
public ResultModel auditresult.service.BonusAuditResultServiceImpl.queryAllShardAggr():[org.springframework.transaction.annotation.Transactional]
public abstract ResultModel auditresult.api.BonusAuditResultService.insertMultiDSWithNShard():[common.annotation.CloudFunction]
public abstract ResultModel auditresult.api.BonusAuditResultService.queryOneShard():[common.annotation.CloudFunction]
public abstract ResultModel auditresult.api.BonusAuditResultService.insertMultiDSWithNShardButOneFailed():[common.annotation.CloudFunction]
public ResultModel auditresult.service.BonusAuditResultServiceImpl.insertAuto():[org.springframework.transaction.annotation.Transactional]
public abstract ResultModel auditresult.api.BonusAuditResultService.delete(TaBaseParameter):[common.annotation.CloudFunction]
public abstract ResultModel auditresult.api.BonusAuditResultService.queryAllShard():[common.annotation.CloudFunction]
public abstract ResultModel auditresult.api.BonusAuditResultService.queryBonusAuditResult(auditresult.dto.BonusAuditResultQueryDto):[common.annotation.CloudFunction]
public ResultModel auditresult.service.BonusAuditResultServiceImpl.insertNonXAABBATrans():[]
public abstract ResultModel auditresult.api.BonusAuditResultService.update(TaBaseParameter):[common.annotation.CloudFunction]
public abstract ResultModel auditresult.api.BonusAuditResultService.insert(TaBaseParameter):[common.annotation.CloudFunction]
public abstract void org.springframework.beans.factory.InitializingBean.afterPropertiesSet() throws java.lang.Exception:[]
public abstract ResultModel auditresult.api.BonusAuditResultService.insertAuto():[common.annotation.CloudFunction]
public ResultModel auditresult.service.BonusAuditResultServiceImpl.queryBonusAuditResult(auditresult.dto.BonusAuditResultQueryDto):[]
public ResultModel auditresult.service.BonusAuditResultServiceImpl.queryAllShard():[org.springframework.transaction.annotation.Transactional]
public ResultModel auditresult.service.BonusAuditResultServiceImpl.delete(TaBaseParameter):[org.springframework.transaction.annotation.Transactional]
public static void auditresult.service.BonusAuditResultServiceImpl.main(java.lang.String[]):[]
public abstract ResultModel auditresult.api.BonusAuditResultService.insertNonXAABBATrans():[common.annotation.CloudFunction]
public ResultModel auditresult.service.BonusAuditResultServiceImpl.update(TaBaseParameter):[org.springframework.transaction.annotation.Transactional]
public ResultModel auditresult.service.BonusAuditResultServiceImpl.insert(TaBaseParameter):[org.springframework.transaction.annotation.Transactional]
=============

method.toString(FQN,全名)和method.getName(短名称)

------------method.getName--------------
run
wait
wait
wait
equals
toString
hashCode
getClass
notify
notifyAll

------------method.toString--------------
public void com.westward.Car.run()
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public boolean java.lang.Object.equals(java.lang.Object)
public java.lang.String java.lang.Object.toString()

java反射之获取所有方法及其注解(包括实现的接口上的注解),获取各种标识符备忘的更多相关文章

  1. ProceedingJoinPoint获取实现类接口上的注解

    使用aspectj处理拦截aop,需要获取实现类接口上的注解 public Object around(ProceedingJoinPoint pjp) throws Throwable{ long ...

  2. Java反射机制的使用方法

    Java的反射机制同意你在程序执行的过程中获取类定义的细节.有时候在程序执行的时候才得知要调用哪个方法,这时候反射机制就派上用场了. 获取类 类的获取方法有下面几种: forName().通过Clas ...

  3. 使用Java反射优化多个方法调用

    有段时间没来写博客了,心里一直念叨空了来,今天有时间来记录一篇.前段时间领导提出优化部分系统模块,根据业务要求系统中有很多产品,产品下面有N个指标,一个指标就对应一个方法,所以系统代码中就是这样一个情 ...

  4. java反射构建对象和方法的反射调用

    Java反射技术应用广泛,其能够配置:类的全限定名,方法和参数,完成对象的初始化,设置是反射某些方法.可以增强java的可配置性. 1.1 通过反射构建对象(无参数): 例如我们使用 ReflectS ...

  5. Java反射【三、方法的反射】

    获取一个类下的所有方法 可以获取类类型后,获取到所有方法及相关信息 Method[] ms = c.getMethods(); 获取方法列表(public) Method[] ms = c.getDe ...

  6. Java反射机制调用私有方法

    1.获取目标类: 每个类都有一个class属性,通过实体类的class属性获取: Class clazz = Person.class 通过对象获取.  Person p1 = new Person( ...

  7. AOP之proceedingjoinpoint和joinpoint区别(获取各对象备忘)、动态代理机制及获取原理代理对象、获取Mybatis Mapper接口原始对象

    现在AOP的场景越来越多,所以我们有必要理解下和AOP相关的一些概念和机制. import org.aspectj.lang.reflect.SourceLocation; public interf ...

  8. Java反射机制二 获取方法的返回值或参数的泛型信息

    在使用反射机制时,我们经常需要知道方法的参数和返回值类型,很简单  ,下面上示例,示例中的两个方法非常相似 package deadLockThread; import java.lang.refle ...

  9. Java 反射 方法调用

    在使用Java 反射时,对方法的调用,可能碰到最多的问题是,方法的变量如何使用.其实,调用方法的变量全部在参数数组里,不管有多少个参数,你都要把它放在参数数组里,如果是单个非数组参数,则可不使用参数数 ...

随机推荐

  1. js canvas游戏初级demo-上下左右移动

    大概流程就是监听状态变化擦除画布重绘 由于js监听时间变化的函数addEventListener只能达到每秒触发20次左右,也就是每秒20帧,看起来有点卡卡的 所以用定时器搞到每秒30帧 按上下左右键 ...

  2. kubernetes in action - Volumes

    Volume解决Kubernetes的存储的问题 对于Pod使用的存储,抽象为volume,volume伴随着Pod的创建而创建,消失而同时消失,不能单独的创建 这样的好处,是存储的塑胶不会因为某个c ...

  3. How to disable transparent hugepages (THP) on Red Hat Enterprise Linux 7

    How to disable transparent hugepages (THP) on Red Hat Enterprise Linux 7 $ Solution 已验证 - 已更新2017年六月 ...

  4. UnicodeDecodeError: 'ascii' codec can't decode byte 0xc7 in position 20: ordinal not in range(128)

    dict = pickle.load(open(file, 'rb')) 修改为: dict = pickle.load(open(file, 'rb'), encoding='iso-8859-1' ...

  5. Map集合转成json数据

    maven项目需要导入一下依赖: <dependency> <groupId>net.sf.json-lib</groupId> <artifactId> ...

  6. 友金所招聘Java工程师面试题

    友金所是一家位于深圳南山科技园的P2P网贷公司,用友集团控股.该公司采用渐进式的问答面试,没有笔试题.比如面试者说熟悉多线程,面试官就问哪些方式解决并发:面试者说采用Synchronized或者Ree ...

  7. 2019-04-20 Python之科学计算库学习总结

    一.numpy库和matplotlib库的学习 (1)numpy库介绍:科学计算包,支持N维数组运算.处理大型矩阵.成熟的广播函数库.矢量运算.线性代数.傅里叶变换.随机数生成,并可与C++/Fort ...

  8. 循环结构 : while .. for

    # ###循环结构 : while .. for ''' while 循环 可以提高代码的效率,减少代码的冗余 while 条件表达式: code1 code2 如果条件表达式成立,返回True , ...

  9. [py]python操作zookeeper

    参考: https://blog.csdn.net/heizistudio/article/details/79568188 1.安装zookeeper zookeeper-3.4.6.tar.gz ...

  10. 牛客(web 1)

    bootstrap(Web框架) 有关换行的知识: http://www.cnblogs.com/wqsbk/p/3493948.html 关于link加载问题: link是同时加载的,script标 ...