1

从我所见,我可以使用 javassist 在 java 类中创建一个新的静态初始化程序。但我需要的是一个非静态初始化程序。

因此,我不想添加: static{...} 到一个类,我只想添加 {..}

我想这样做的原因是因为我想创建一个类加载器,它返回由 ProxyFactory 包装的类,因为我必须向某些类添加一个处理程序。我的想法是将此代码添加到每个类的非静态初始化程序中: ((javassist.util.proxy.Proxy)this).setHandler(new library.proxy.Handler());

那么,任何想法如何添加非静态初始化程序?或者以不同的方式解决我的问题?非常感谢

4

1 回答 1

1

在字节码级别,Java 中不存在非静态初始化程序。您在源代码中创建的初始化程序 {} 块实际上合并为一个,并成为该类的所有构造函数的一部分。

因此,如果您需要注入非静态块,则必须修补类的构造函数。有点:

Constructor[] cs = ctClass.getConstructors();
for(Constructor c: cs) {
  c.insertBefore("your code goes here");
}
于 2012-10-20T12:21:59.443 回答