问题标签 [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.

0 投票
1 回答
362 浏览

java - 在运行时增强 java 对象

我知道使用支持代理的库(javassist、JDK 动态代理等)可以增强以在运行时实现接口。

我的问题是:是否可以增强实例化对象以在运行时实现接口(并同样提供适当的方法处理程序)。

0 投票
4 回答
13297 浏览

java - Javassist。主要思想是什么,真正的用途是什么?

我知道 Javassist 是一个 Java 库,它提供了一种操作应用程序的 Java 字节码的方法。

好的,但是为什么我们需要操纵字节码呢?

有什么真实的例子吗?任何真正的应用程序,javassist 在哪里使用?

0 投票
1 回答
5984 浏览

java - 为什么在使用 Javassist 更改方法主体后必须调用 .toClass()?

我通过 Javassist修改我的getMessage()方法体,如下所示:TestClass

它运作良好。但是,如果我删除ctClass.toClass()方法调用,则正文替换不起作用。为什么?

我应该如何正确替换我的getMessage()方法的主体?我做对了吗?

0 投票
3 回答
5463 浏览

java - 如何使用 Javassist 获取原始类型的类?

在我的程序中,我处理类和原始类型。如果程序找到一个类,它只需执行以下调用之一:

  • Class.forName(classname)
  • cc.toClass()cc的一个实例在哪里CtClass

但是,如果它找到原始类型,情况会变得更糟:

  • Class.forName不可用,它不能与原始类型一起使用。
  • cc.toClass()返回null

可以从原始类型包装器类中调用该TYPE字段,但是如何使用反射来做到这一点?

这是我的代码:

Javassist 3.12.0.GA

编辑: 我已经在下面的答案中发布了我选择的解决方案。无论如何,我勾选了汤姆的回答

0 投票
1 回答
325 浏览

delegates - 如何理解这个委托人

我正在阅读 activejdbc 的源代码,在ModelInstrumentation找到了这些方法。

该类用于增强模型类,第一个instrument将首先将所有非私有方法委托org.javalite.activejdbc.Model给其子模型类,这意味着它将向子模型类添加此类方法:

我不明白它为什么这样做,因为即使没有委托,我们也可以调用这些方法。

0 投票
1 回答
1897 浏览

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)

0 投票
1 回答
2371 浏览

java - ClassPool.getDefault(); 在 Javassist 中什么都不做

会发生什么ClassPool.getDefault();

0 投票
1 回答
882 浏览

java - 获取动态生成的java类的源代码

我正在动态生成新类(使用 Javassist),我希望能够获得此类生成的类的源代码。

是否有用于以编程方式反编译字节码的库?注意我要反编译的字节码不存在于文件系统中,只存在于内存中。

0 投票
1 回答
1623 浏览

java - 如何使用 Javassist 从其源代码加载一个类?

我在输入流中有一个类的完整源代码。CtClass是否可以使用 Javassist为此类创建新对象?

我知道使用类的名称可以创建一个新CtClass对象,例如:

但在我的情况下,我事先不知道类的名称,而只是知道它的完整源代码(当然我可以通过解析源代码得到类的名称,但请不要告诉我这是解决方案 :-) )

0 投票
2 回答
3854 浏览

java - 如何使用 javassist 创建类的副本?

使用 Javassist,我如何创建一个与我拥有的类完全相同但名称不同的类。我也想保留所有运行时注释。