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()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!