我正在研究Web应用程序,以解决一些问题。该应用程序使用Tomcat,Jersey和Guice。用于授权目的的MethodInterceptor中发生了问题之一。这是方法,已裁剪为相关部分:

public Object invoke(MethodInvocation invoc) throws Throwable {

// ...

//Check that the annotation actually exists

if(! invoc.getMethod().getDeclaringClass().isAnnotationPresent(Tool.class))

{

throw new BaseException("...");

}

// ...

}

现在的问题是某些“面向Web”的方法是从父类继承而没有在子类中被覆盖。如果我正确理解getDeclaringClass(),在这种情况下它将返回父类,但是我们真正想要的是子类。一些测试似乎证实了这一点-如果我在子类中重写该方法,一切都很好,但是,如果我不放入重写中,则会引发异常。

因此,给定一个MethodInvocation对象,是否有办法将其追溯到实例化的“实际”类,而不是声明该方法的类?还是需要其他方法?最坏的情况是,我可以根据需要注释每个方法,而不必注释类。

很抱歉,如果这是一个容易回答的冗长问题-我的Java非常生锈。

参考方案

很简单,需要在MethodInvocation上使用getThis().getClass()而不是getMethod().getDeclaringClass():

if(! invoc.getThis().getClass().isAnnotationPresent(Tool.class))

{

throw new BaseException("...");

}

尽管就我而言,Guice通过放入一个自动生成的子类(例如,以“$$ EnhancerByGuice ...结尾”的类名)使事情有些复杂,这是通过使用getSuperclass()在树上向上移动来解决的:

if(! invoc.getThis().getClass().getSuperclass().isAnnotationPresent(Tool.class))

{

throw new BaseException("...");

}

Java:从类中查找项目名称 - java

仅通过类的实例,如何使用Java反射或类似方法查找项目名称?如果不是,项目名称(我真正想要的是)可以找到程序包名称吗? 参考方案 项目只是IDE使用的简单组织工具,因此项目名称不是类或JVM中包含的信息。要获取软件包,请使用Class#getPackage()。然后,可以调用Package#getName()将包作为您在代码的包声明中看到的String来获取…Java:正则表达式模式匹配器是否有大小限制? - java

我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)Java:线程池如何将线程映射到可运行对象 - java

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …Java:我可以在Hashmaps中使用数组吗? - java

我可以在Hashmaps中使用数组吗?如果是这样,则声明这种哈希图的确切语法是什么?谢谢 参考方案 数组也是对象。甚至像int[]这样的原始数组。Map map = new HashMap();JAVA:字节码和二进制有什么区别? - java

java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…

java类获取声明,获取用于MethodInvocation的实际类而不是声明类 - java相关推荐

  1. JAVA类与对象tank_5.编写一个java程序,该程序有两个类:Tank(用于刻画坦克)和Fight(主类)。 已知坦克类如下:...

    5.编写一个java程序,该程序有两个类:Tank(用于刻画坦克)和Fight(主类). 已知坦克类如下: public classTank{ double speed;        //坦克速度 ...

  2. 浅谈Java反射机制 之 获取类的字节码文件 Class.forName(全路径名) 、getClass()、class...

    先贴上Java反射机制的概念: AVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它的任意一个方法和属性: 这种动态获取的信息以及动态调用对 ...

  3. java 获取所有实现类_Java动态获取实现某个接口下所有的实现类对象集合

    Java动态获取实现某个接口下所有的实现类对象集合 最近有个需求,我需要获取所有同一类型的定时任务的对象,并自动执行. 我想的方案是:直接获取某个接口下面所有的实现类的对象集合,方便以后只需要 实现这 ...

  4. 【Java 19】反射 - 反射机制概述、获取Class实例、类的加载与ClassLoader的理解、创建运行时类的对象、获取运行时类的完整结构、调用运行时类的指定结构、动态代理

    反射机制概述.获取Class实例.类的加载与ClassLoader的理解.创建运行时类的对象.获取运行时类的完整结构.调用运行时类的指定结构.动态代理 反射 1 Java反射机制概述 1.1 Java ...

  5. Java 学习之反射机制“解刨”分解类,并获取内容!

    正常情况下,单纯的做开发是接触不到反射机制的(额,当然并不排除例外的情况了).下面我就对我学到的反射方面的知识做一个小小的总结,旨在复习和以后的查看. 原理分析: 所谓反射就是将一个类当做我们研究的对 ...

  6. Java基础知识点__获取运行时类的完整结构

    通过反射获取运行时类的完整结构 Field,method,Construuuctor,Superclass,Interface,Annotation 实现的全部接口 继承的父类 全部的构造器 全部的构 ...

  7. Java面试题(十四)----- 如何获取父类的类名字 ? 如何获取当前运行类的类名

    Java面试题(十四)----- 如何获取父类的类名字 ? 如何获取当前运行类的类名 文章目录

  8. 什么叫做类的类?如何获取私有的方法?Java反射机制太强大了,详解Java反射机制【Java养成】

    Java学习打卡:第二十二天 内容导航 Java学习打卡:第二十二天 内容管理 Java反射机制 问题引入---数据库介绍 Java反射的介绍 class的使用 由字符串产生类和对象 获取一个类的所有 ...

  9. c# typescript_在任何IDE中从C#,Java或Python代码获取TypeScript接口的简单方法

    c# typescript by Leonardo Carreiro 莱昂纳多·卡雷罗(Leonardo Carreiro) 在任何IDE中从C#,Java或Python代码获取TypeScript接 ...

最新文章

  1. Fastadmin管理Mysql_FastAdmin-CMS模版制作(6)-正式部署
  2. linux access函数_构建一个即时消息应用(九):Conversation 页面 | Linux 中国
  3. 文件上传漏洞及解决办法
  4. 频繁弹出“受到网络攻击”的消息怎么办,五分钟看懂“僵尸网络”攻击
  5. mybatisplus批量插入原理_【学习】热转印工艺原理、特点及工艺流程
  6. MyBatis--工具类模板
  7. docker wsl2启动不了_在window上安装docker的方法
  8. 谷歌地图自定义popup框
  9. python的条件(三元)运算符——实现b? x: y
  10. svn上传文件最大多少_SVN控制上传文件尺寸
  11. android遥控器:控制电脑上的暴风影音播放(C#作为服务端)
  12. matlab l 汉字字符串,Matlab中汉字编码的操作
  13. pb一步步开发APP
  14. Java开发企业微信群机器人发送markdown消息
  15. 国内高校大数据教研机构调研报告
  16. 【C语言】五彩斑斓的颜色
  17. DEAP Example: One Max Problem
  18. android 4.4 锁屏密码,安卓手机忘记锁屏密码怎么办?安卓手机绕过锁屏密码的几种解决方法...
  19. java断言常用方法_robot framework中Should 断言的基本使用方法
  20. PHP获取本周一本周日上周一上周日本月一号本月最后一天

热门文章

  1. cnblogs第一篇
  2. dva.js在index。tsx中获取script标签引用的文件
  3. mongoDB安装使用
  4. 有趣的库:pipe(类似linux | 管道)库
  5. HDU1081 (最大连续子序列/矩阵)
  6. linux修改selinux
  7. DataView.RowFilter使用
  8. [概统]本科二年级 概率论与数理统计 第三讲 离散型随机变量
  9. UA MATH565C 随机微分方程II Wiener过程简介
  10. MySql数据库使用入门