问题标签 [javassist]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
analysis - 从字节码中获取代码操作数的名称
我正在分析一个类的字节码。我可以检测到操作码及其操作数。我怎样才能得到这个的名字(对象的名字)
例如,操作码是新的,我有一个整数作为操作数(想想下面的代码:“new String()”)我应该在哪里搜索名称?在constantPool的类又如何?我不是专家
java - 选择哪个库在运行时生成类
我需要在运行时扩展类,特别是检测对类状态所做的更改。如果可能的话,我希望能够通过拦截字段分配来检测更改,如果不拦截 setter 就可以了。我应该使用哪个库,为什么?javassist 或 cglib 还是?java.lang.reflect.Proxy 这可能吗?你能比较这些库吗?谢谢。
java - Javassist:如何在动态生成的类上调用非默认构造函数?
我在这个问题上花了很多时间,但无济于事。理想情况下,我想将参数传递给动态生成的类的构造函数。问题是我不知道如何使用参数化构造函数进行实例化。
到目前为止,我的实例化方法是......
有没有更好的方法可以提供更大的灵活性?
非常感谢!
RB
java - Javassist:如何将动态生成的类添加到特定的包中?
我正在生成需要从其他现有类访问受保护字段的类。因此,我需要指定它应该结束的类路径。
有谁知道如何在 Javassist 中做到这一点?
java - CtClass.toClass 引发异常,消息为“null”
我执行创建动态类的步骤如下:
我首先尝试检查该类是否已经存在,ClassPool
否则我继续创建一个类。除霜仅用于故障安全机制。toClass
调用方法时出现异常dynamicClass.toClass();
异常如下
上述异常的原因是什么,可以做些什么来避免它?
java - Java 类可以在运行时向自身添加方法吗?
一个类可以在运行时向自己添加一个方法(比如从一个static
块中),这样如果有人在这个类上执行反射,他们会看到新方法,即使它没有在编译时定义?
背景:
按照惯例,我正在使用的框架期望Action
定义具有doAction(...)
方法的类。框架在运行时检查这些类,以查看它们的doAction()
方法中可用的参数类型。例如:doAction( String a, Integer b)
我希望每个类都能够以编程方式生成doAction()
具有各种参数的方法,并在检查时即时生成。方法的主体可以为空。
java - 利用 Javassist 提供基于返回类型的重载
我使用 Javassist 动态更改函数调用的返回类型,但它不起作用。
我有一个在源代码中简单定义的调用:
但随后在运行时我将其动态更改为:
然后我将其称为:
并得到一个 MethodNotFound 异常。如果我使用反射,我可以在对象上看到我的新方法,但调用失败,显然是因为它以某种方式绑定到旧的返回类型。
如果我反射性地调用新方法(轻微的伪代码..):
然后一切正常,我可以毫无问题地在操纵和非操纵字节码之间切换,并且我可以看到 O 的类型相应地是 String 或 Boolean 。
任何想法为什么?
java - java协助新手问题
我正在尝试动态生成一些类,以下是我的初步尝试:
但我面临一个类加载器问题:
线程“主”java.lang.IllegalArgumentException 中的异常:无法在 sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:146) 处将 java.lang.String 字段 Entity.name 设置为 java.lang.String。 UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:150) 在 sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:37) 在 sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:57) 在 java.lang.reflect.Field.set (Field.java:657) 在 Main.test(Main.java:26)
关于如何解决这个问题的任何想法?
java - java - 如何在java中创建一个保留方法参数注释的动态代理?
我目前正在尝试代理一些现有的 JAX/RS 资源,以允许我使用 Hibernate Validator 的方法验证支持。但是,当我代理我的类(当前使用 cglib 2.2)时,FormParam 注释不存在于代理类中的参数上,因此 JAX/RS 运行时(apache wink)不会填充参数。下面是一些显示这一点的测试代码:
这给了我以下输出:
还有其他选择吗?
java - 使用 Javassist 的意外 NullPointerException
我运行以下代码:
这个 NPE 被提出: