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. AS中jar包和aar包区别及导入导出

    发布时间:2018-01-18 来源:网络 上传者:用户 关键字: 导出 导入 区别 包和 aar jar 发表文章 摘要:jar包和aar包区别*.jar:只包含class文件与清单文件,不包含资源 ...

  2. git 和github使用

    强制推送覆盖到远程仓库!!

  3. oracle学习笔记第三天

    --DML(Data Manipulation Language)--insert关键字 插入 ---语法1.元祖值式插入(一次插入一条记录)---格式:insert into 表名(列名1,列名2. ...

  4. python中字符串的拼接

    1.+ 号 2.format() 3.f"{username}登录成功" 4.%s 5.列表中的 join 6.逗号 http://www.cnblogs.com/gengcx/p ...

  5. GIT回滚master分支到指定tag版本

    master版本上线以后一般要打一个tag备份,以防事态有变,这是一个好习惯,如果以后有问题也可以放心的回滚版本,那么怎么用tag版本覆盖mastaer呢,其实只有几个命令 1.查看分支 git br ...

  6. OI养老专题03:让坏人出列的约瑟夫问题

    问题是这样的:一共有2n个人,其中有n个好人,n个坏人.好人的编号是1~n,坏人的编号是n+1~2n.要求你求出最小的m(报数到m的人出局),让前n个出局的人都是坏人. 似乎除了暴力,我们想不出其它的 ...

  7. laravel----------Client error: `POST http://47.98.116.219/oauth/token` resulted in a `401 Unauthorized` response: {"error":"invalid_client","message":"Client authentication failed"}

    1.设备没有授权,原因是 这个client_id的值就是数据库wk_oauth_clients 的主键ID,查看下表是否有这条数据

  8. memcached----------linux下安装memcached,以及php的memcached扩展。

    1.通过wget http://www.memcached.org/files/memcached-1.4.24.tar.gz下载最新源码2.解压tar -xf memcached-1.4.24.ta ...

  9. python迭代器的原理及应用

    ''''什么是迭代器?迭代的工具1.什么是迭代? 迭代是一个重复的过程,每一次重复都是基于上一次结果而进行的while True: print('hello world')像上面做这种单纯的重复并不是 ...

  10. Spring Boot:快速入门(二)

    学习完成怎么搭建一个独立Spring Boot项目后,上面是整理出来的一些相关文件以及用途. 原本是一个Excel文件,拷贝到博客园就成了图片,当做几个笔记了,用到的时候可以查阅,也欢迎转载,收藏. ...