zoukankan      html  css  js  c++  java
  • java反射之获取所有方法及其注解(包括实现的接口上的注解),获取各种标识符备忘

    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()

  • 相关阅读:
    chrony软件使用说明
    使用cobbler批量安装操作系统(基于Centos7.x )
    kickstart模式实现批量安装centos7.x系统
    uCGUI字符串显示过程分析和uCGUI字库的组建
    Network boot from AMD Am79C970A
    关于TFTLCD硬件接口和驱动的问题
    (转)关于模拟地和数字地分开的问题解释!
    获取单片机代码运行时间的方法
    stm32类型cl、vl、xl、ld、md、hd的含义
    RS232转RS485电路图分析
  • 原文地址:https://www.cnblogs.com/zhjh256/p/10700952.html
Copyright © 2011-2022 走看看