javassist相关内容

在运行时替换一些方法的内容

我想在运行时替换一些方法的内容. 我知道我可以使用 javassist 来做这件事,但它不起作用,因为我想增强的类已经被系统 classLoader 加载了. 如何在运行时替换方法的内容?我应该尝试卸载课程吗?我怎样才能做到这一点 ?我看到这是可能的,但我不知道如何去做. 如果可能,我想避免为此使用外部库,我想自己编写代码. 更多信息:- 我想增强的类包含在一个框架中(在一 ..
发布时间:2022-01-02 21:40:04 Java开发

反射 - Java 8 - 无效的常量类型

我在使用 Reflections 库时遇到问题.我正在尝试动态加载实现特定接口的所有类.只要我不在这些类中使用 lambda 表达式(java 8),一切都正常(所有类都已加载).我尝试升级 lib 版本但效果是一样的(java.io.IOException: invalid constant type: 18). 依赖并在 pom.xml 中构建 org.reflec ..
发布时间:2021-12-28 08:49:08 Java开发

Java 类可以在运行时向自身添加方法吗?

一个类是否可以在运行时向自身添加一个方法(比如从 static 块),这样如果有人在这个类上执行反射,他们会看到新方法,即使它没有在编译时定义? 背景: 我使用的框架期望 Action 类被定义为具有 doAction(...) 方法,按照惯例.框架在运行时检查这些类以查看它们的 doAction() 方法中可用的参数类型.例如:doAction(String a, Integer b ..
发布时间:2021-11-25 16:37:47 Java开发

Javassist注解问题

我正在尝试使用 javassist 生成我的实体类.一切都很顺利,直到我将 GeneratedValue 注释添加到 Id 字段.@Id 注释工作正常,但是当我添加 @GeneeratedValue 时出现异常.这是我的代码: ClassPool cp = ClassPool.getDefault();CtClass ctClass = cp.makeClass("test.Snake");C ..
发布时间:2021-11-10 23:07:55 Java开发

编译后从字节码中删除注释

我们使用的库包含用 JAXB 注释进行注释的 bean.我们使用这些类的方式并不依赖于 JAXB.换句话说,我们不需要 JAXB,也不依赖注解. 然而,由于注解存在,它们最终会被其他处理注解的类引用.这要求我在我们的应用程序中捆绑 JAXB,这是不允许的,因为 JAXB 位于 javax.* 包中(android 不允许“核心库"包含在您的应用程序中). 因此,考虑到这一点,我正在寻找 ..
发布时间:2021-11-10 22:40:31 Java开发

将动态参数传递给注解

我想知道是否有可能将值动态传递给注释属性. 我知道注释不是为了修改而设计的,但我正在使用 休眠过滤器 和条件在我的情况下不是静态的. 我认为唯一的解决方案是使用旨在读取和修改字节码的库,例如 Javassist 或 ASM 但如果有其他解决方案就更好了. ps:就我而言,困难在于我应该修改注释(属性的值),但我上面提到的库允许创建而不是编辑,这就是我想知道另一个解决方案的原因 ..
发布时间:2021-11-10 22:26:55 Java开发

使用 javassist 添加方法参数名称

当方法参数名称不存在时,如何将方法参数名称添加到方法中? 有一些示例说明如何使用以下方法检索这些名称(如果存在): CtMethod m;CodeAttribute codeAttribute = m.getMethodInfo().getCodeAttribute();如果(代码属性!= null){LocalVariableAttribute table = (LocalVariabl ..
发布时间:2021-07-06 18:49:54 Java开发

Java字节码操作和Java反射API?

我最近遇到了“字节码操作"这个词(是什么让我研究了这个,偶然地我看到了字节码提供者,同时看到了使用 Hibernate 的应用程序中的日志).我也知道(有点)Java Reflection API. 这两个概念相似吗?它们之间有什么区别?什么时候使用哪个? 解决方案 反射 API 允许您访问有关已加载到 JVM 的类的成员(字段、方法、接口等)的信息.这个 API 不允许修改类的行为 ..
发布时间:2021-07-06 18:40:22 Java开发

将代理附加到现有对象?

我的计划是编写一个基于注解的缓存框架来缓存方法的返回值.当第一次使用特定参数调用方法时,缓存应存储方法的返回值.当使用相同参数第二次调用同一方法时,该方法应从缓存中返回先前计算的结果,并且不再执行其代码.我的注释如下所示: @Cached(cacheProvider = HashMapCacheProvider.class)公共产品 getProduct(String productId){// ..
发布时间:2021-06-22 20:34:52 Java开发

尝试添加行以创建Map时出现Javassist CannotCompileException

um尝试检测执行以下任务的方法.任务-创建地图并将值插入地图添加System.out.println行不会导致任何异常.但是,当我添加行以创建Map时,由于 missing ; ,它会抛出 cannotCompileException .当我打印最后的字符串时,它似乎不会丢失任何字符串.我在这里做错了什么. public void createInsertAt(CtMethod方法,int l ..
发布时间:2021-05-16 19:11:03 Java开发

Javassist的CtMethod.insertAt(line,src)仪器代码在错误的字节码位置

我的目标是在每个基本代码块的开头插入一些检测代码.使用Javaassist的ControlFlow.Block和CtMethod.insertAt()似乎是一个相当简单的任务.到目前为止,这是相关的代码块(位于转换函数中): ControlFlow flow =新的ControlFlow(m);//m是当前正在检测的CtMethodBlock [] blockArray = flow.basi ..
发布时间:2021-05-16 19:10:57 Java开发

在注入JVM之前如何验证Java字节码?

我正在尝试验证“即时"生成的字节码! 我已经进行了几次尝试,一次尝试是使用eclipse编译器在运行时编译我的类,另一次尝试是从内存中进行编译,如下所述: 从内存编译 最初的结果看起来还不错,但是我仍然不确定100%的验证过程是否符合JAVA 6准则和安全性度量以及正常的OOP模型. 有没有更好的方法来验证字节码? 解决方案 如果使用标准类加载器加载生成的字节码,则 ..
发布时间:2021-04-17 18:30:53 Java开发