问题标签 [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.
java - 在运行时增强 java 对象
我知道使用支持代理的库(javassist、JDK 动态代理等)可以增强类以在运行时实现接口。
我的问题是:是否可以增强实例化对象以在运行时实现接口(并同样提供适当的方法处理程序)。
java - Javassist。主要思想是什么,真正的用途是什么?
我知道 Javassist 是一个 Java 库,它提供了一种操作应用程序的 Java 字节码的方法。
好的,但是为什么我们需要操纵字节码呢?
有什么真实的例子吗?任何真正的应用程序,javassist 在哪里使用?
java - 为什么在使用 Javassist 更改方法主体后必须调用 .toClass()?
我通过 Javassist修改我的getMessage()
方法体,如下所示:TestClass
它运作良好。但是,如果我删除ctClass.toClass()
方法调用,则正文替换不起作用。为什么?
我应该如何正确替换我的getMessage()
方法的主体?我做对了吗?
delegates - 如何理解这个委托人
我正在阅读 activejdbc 的源代码,在ModelInstrumentation中找到了这些方法。
该类用于增强模型类,第一个instrument
将首先将所有非私有方法委托org.javalite.activejdbc.Model
给其子模型类,这意味着它将向子模型类添加此类方法:
我不明白它为什么这样做,因为即使没有委托,我们也可以调用这些方法。
hibernate - 通过自动发现加载动态创建的实体
我必须使用一个奇怪的数据库结构,在生产中可能有更多表但具有相同的列。我们希望通过实体/JPQL 查询使用 JPA (Hibernate) 来处理它们。这个想法是在运行时在 JVM 中为每个表动态创建实体类。这种方法效果很好。我使用 Javassist 创建实体 - 使用已经存在的编译实体,并动态添加注释(实体、表):
当我从一个配置对象手动构建一个 Hibernate SessionFactory 时,使用 addAnnotatedClass 方法将这些类添加到配置中,它工作正常。问题在于自动发现,当我在 spring 上下文中使用包扫描时,JPA 或 AnnotationSessionFactoryBean 都没有发现/找到实体。(我得到:“QuerySyntaxException:[MyEntity] 未映射”异常)
Class.forName(myNewEntityName) 有效,这意味着它在类加载器中被初始化。
(当然我知道这不是处理这些表格的理想设计模式。)
问题是为什么以及如何鞋底?
(Javassist 3.15.0-GA,hibernate core 3.6.6.Final,hibernate-entitymanager 3.5.6-Final)
java - ClassPool.getDefault(); 在 Javassist 中什么都不做
会发生什么ClassPool.getDefault();
?
java - 获取动态生成的java类的源代码
我正在动态生成新类(使用 Javassist),我希望能够获得此类生成的类的源代码。
是否有用于以编程方式反编译字节码的库?注意我要反编译的字节码不存在于文件系统中,只存在于内存中。
java - 如何使用 Javassist 从其源代码加载一个类?
我在输入流中有一个类的完整源代码。CtClass
是否可以使用 Javassist为此类创建新对象?
我知道使用类的名称可以创建一个新CtClass
对象,例如:
但在我的情况下,我事先不知道类的名称,而只是知道它的完整源代码(当然我可以通过解析源代码得到类的名称,但请不要告诉我这是解决方案 :-) )
java - 如何使用 javassist 创建类的副本?
使用 Javassist,我如何创建一个与我拥有的类完全相同但名称不同的类。我也想保留所有运行时注释。