javassist相关内容
我想在运行时替换一些方法的内容. 我知道我可以使用 javassist 来做这件事,但它不起作用,因为我想增强的类已经被系统 classLoader 加载了. 如何在运行时替换方法的内容?我应该尝试卸载课程吗?我怎样才能做到这一点 ?我看到这是可能的,但我不知道如何去做. 如果可能,我想避免为此使用外部库,我想自己编写代码. 更多信息:- 我想增强的类包含在一个框架中(在一
..
我在使用 Reflections 库时遇到问题.我正在尝试动态加载实现特定接口的所有类.只要我不在这些类中使用 lambda 表达式(java 8),一切都正常(所有类都已加载).我尝试升级 lib 版本但效果是一样的(java.io.IOException: invalid constant type: 18). 依赖并在 pom.xml 中构建 org.reflec
..
一个类是否可以在运行时向自身添加一个方法(比如从 static 块),这样如果有人在这个类上执行反射,他们会看到新方法,即使它没有在编译时定义? 背景: 我使用的框架期望 Action 类被定义为具有 doAction(...) 方法,按照惯例.框架在运行时检查这些类以查看它们的 doAction() 方法中可用的参数类型.例如:doAction(String a, Integer b
..
我正在尝试使用 javassist 生成我的实体类.一切都很顺利,直到我将 GeneratedValue 注释添加到 Id 字段.@Id 注释工作正常,但是当我添加 @GeneeratedValue 时出现异常.这是我的代码: ClassPool cp = ClassPool.getDefault();CtClass ctClass = cp.makeClass("test.Snake");C
..
我们使用的库包含用 JAXB 注释进行注释的 bean.我们使用这些类的方式并不依赖于 JAXB.换句话说,我们不需要 JAXB,也不依赖注解. 然而,由于注解存在,它们最终会被其他处理注解的类引用.这要求我在我们的应用程序中捆绑 JAXB,这是不允许的,因为 JAXB 位于 javax.* 包中(android 不允许“核心库"包含在您的应用程序中). 因此,考虑到这一点,我正在寻找
..
我想知道是否有可能将值动态传递给注释属性. 我知道注释不是为了修改而设计的,但我正在使用 休眠过滤器 和条件在我的情况下不是静态的. 我认为唯一的解决方案是使用旨在读取和修改字节码的库,例如 Javassist 或 ASM 但如果有其他解决方案就更好了. ps:就我而言,困难在于我应该修改注释(属性的值),但我上面提到的库允许创建而不是编辑,这就是我想知道另一个解决方案的原因
..
我正在使用 Javassist(Java 1.7) 向 ClassA 类添加注释,但出现异常.我究竟做错了什么?我试过的代码是这样的: ClassA.java 公共类 ClassA{} 添加方法 public static 类addXmlRootAnnotationDynamicly(Class DeclarationTyp) 抛出 NotFoundException、CannotCo
..
我正在使用 Javassist 生成一个类 foo,使用方法 bar,但我似乎找不到向方法添加注释(注释本身不是运行时生成的)的方法.我试过的代码是这样的: ClassPool pool = ClassPool.getDefault();//创建类CtClass cc = pool.makeClass("foo");//创建方法CtMethod mthd = CtNewMethod.make("
..
当方法参数名称不存在时,如何将方法参数名称添加到方法中? 有一些示例说明如何使用以下方法检索这些名称(如果存在): CtMethod m;CodeAttribute codeAttribute = m.getMethodInfo().getCodeAttribute();如果(代码属性!= null){LocalVariableAttribute table = (LocalVariabl
..
我最近遇到了“字节码操作"这个词(是什么让我研究了这个,偶然地我看到了字节码提供者,同时看到了使用 Hibernate 的应用程序中的日志).我也知道(有点)Java Reflection API. 这两个概念相似吗?它们之间有什么区别?什么时候使用哪个? 解决方案 反射 API 允许您访问有关已加载到 JVM 的类的成员(字段、方法、接口等)的信息.这个 API 不允许修改类的行为
..
我的计划是编写一个基于注解的缓存框架来缓存方法的返回值.当第一次使用特定参数调用方法时,缓存应存储方法的返回值.当使用相同参数第二次调用同一方法时,该方法应从缓存中返回先前计算的结果,并且不再执行其代码.我的注释如下所示: @Cached(cacheProvider = HashMapCacheProvider.class)公共产品 getProduct(String productId){//
..
我有一个项目,我使用 Javassist 记录传出的方法/构造函数调用,代码如下: CtMethod cm = ... ;厘米.仪器(新的表达式编辑器(){公共无效编辑(MethodCall m)抛出无法编译异常{if (m.getClassName().equals("Point")&&m.getMethodName().equals("move"))m.replace("{ $1 = 0;
..
我在项目中使用 javassist ,我需要在运行时创建以下接口: package com.example;导入org.springframework.data.repository.CrudRepository;导入com.example.Cat;公共接口CatRepository扩展了CrudRepository.{} 虽然创建扩展 CrudRepository
..
um尝试检测执行以下任务的方法.任务-创建地图并将值插入地图添加System.out.println行不会导致任何异常.但是,当我添加行以创建Map时,由于 missing ; ,它会抛出 cannotCompileException .当我打印最后的字符串时,它似乎不会丢失任何字符串.我在这里做错了什么. public void createInsertAt(CtMethod方法,int l
..
我的目标是在每个基本代码块的开头插入一些检测代码.使用Javaassist的ControlFlow.Block和CtMethod.insertAt()似乎是一个相当简单的任务.到目前为止,这是相关的代码块(位于转换函数中): ControlFlow flow =新的ControlFlow(m);//m是当前正在检测的CtMethodBlock [] blockArray = flow.basi
..
我正在尝试使用javassist修改类构造函数中的以下字段: 标签Label1 = new Label(new StringBuilder().append(user.name));Label Label2 = new Label(new StringBuilder().append(user.time.toString()); 我想在2个标签前添加文字.可以使用getText()和setT
..
我正在尝试使用javassist将代码注入minecraft 1.8 jar中. insertBefore & insertAfter 方法可以很好地工作.但是方法中的insert不能按预期工作.我收到此错误: https://gist.github.com/czaarek99/dda36426318f331ce6b0 以下是处理注入的代码: if(className.equals(ma
..
我有一个像这样的类结构: package com.mydomain.myproject;公共课外{内部公共类{//一些代码}} 现在,我可以使用以下方法获取内部类的 CtClass : ClassPool pool = ClassPool.getDefault();CtClass innerCt = pool.getCtClass("com.mydomain.myproject.Out
..
我需要知道是否可以使用以下代码和javassist来操纵代码,以将逻辑运算符“>"替换为“ 5){System.out.println(“我爱苹果");}别的{System.out.println(“我讨厌苹果");}}} 在操作之后,该类的执行应打印:“我爱苹果"代替:“我
..
我正在尝试验证“即时"生成的字节码! 我已经进行了几次尝试,一次尝试是使用eclipse编译器在运行时编译我的类,另一次尝试是从内存中进行编译,如下所述: 从内存编译 最初的结果看起来还不错,但是我仍然不确定100%的验证过程是否符合JAVA 6准则和安全性度量以及正常的OOP模型. 有没有更好的方法来验证字节码? 解决方案 如果使用标准类加载器加载生成的字节码,则
..