使用javassist创建非静态初始化程序

时间:2012-09-10 09:58:59

标签: java javassist

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

所以不要添加: 静态{...}到类我只想添加{..}

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

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

1 个答案:

答案 0 :(得分:1)

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

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

Constructor[] cs = ctClass.getConstructors();
for(Constructor c: cs) {
  c.insertBefore("your code goes here");
}