2012-09-10 93 views
1

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

因此,而不是添加: 静态{...}的一类,我只是想添加{..}

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

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

+0

您可以试试[AspectJ](http://www.eclipse.org/aspectj/)。 javassist似乎不是您的需求的一个很好的解决方案。 – basiljames

回答

1

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

所以如果你需要一个非静态块被注入,你必须修补类的构造函数。排序:

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