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. 换目标啦,初识PHP

    一.初识PHP脚步程序 1.PHP开始标记 <?php 2.PHP结束标记 ?> <?php?> 3.我们的页面最终是通过html,css,js来展示出一个炫丽的界面 4.PH ...

  2. centos安装make

    CentOS 中无法使用make,make install 命令 提示错误:make: command not found make是gcc的编译器,一定要安装 1.安装: yum -y instal ...

  3. LeetCode 96 - 不同的二叉搜索树 - [DP]

    假定 $f[n]$ 表示有 $n$ 个节点的二叉树,有多少种不同结构. 因此 $f[n] = \sum_{i=0}^{n-1} (f[i] \times f[n-1-i])$,选一个节点作为根节点,那 ...

  4. 《ABCD组》第一次作业:团队亮相

    ABCD组:团队亮相 项目 内容 这个作业属于哪个课程 http://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nw ...

  5. 2018-2019-2 网络对抗技术 20165225 Exp6 信息搜集与漏洞扫描

    2018-2019-2 网络对抗技术 20165225 Exp6 信息搜集与漏洞扫描 实践内容 (1)各种搜索技巧的应用 (2)DNS IP注册信息的查询 (3)基本的扫描技术:主机发现.端口扫描.O ...

  6. Tomcat出现端口占用错误

    Several ports (8005, 8080, 8009) required by Tomcat v8.5 Server at localhost are already in use. The ...

  7. HotSpot设计原理与实现:一、初识HotSpot

    一.HotSpot内核模块组成和功能框架 1.HotSpot内核模块图 (1)Prims模块: (2)Service模块: (3)Runtime模块: 二.虚拟机生命周期(JVM初始化过程) 1.虚拟 ...

  8. AWS deepracer

    0.安装 坑很多,Ubuntu16.04上安python3,gazebo9,各种包,最后在python2下roslaunch,参见我爱豆的github: https://github.com/exit ...

  9. Custom Window

    public class CustomWnd : System.Windows.Window { static CustomWnd() { DefaultStyleKeyProperty.Overri ...

  10. js中类似null==flase的比较图集

    以上是比较全的图集了,大家可以自行测试.