现在在java中执行静态调度,字节码生成代理的最佳方法是什么?

时间:2011-02-20 16:52:01

标签: java bytecode

我在epast中使用了cglib,但坦率地说,我必须相信有一种比cglib中的回调数组和回调过滤器方法更方便的方法。我知道曾经有一个aspectwerkz代理。但它似乎已经在某处徘徊。

2 个答案:

答案 0 :(得分:3)

Javassist允许使用Java代码片段编写字节码:

CtClass point = ClassPool.getDefault().get("Point");
CtMethod m = CtNewMethod.make(
             "public int xmove(int dx) { x += dx; }",
             point);
point.addMethod(m);

答案 1 :(得分:2)

如果您只想要使用字节码进行最少量的简单代理,请尝试使用janino(http://docs.codehaus.org/display/JANINO/Home):

final String bodyText=
"public Object get(Object obj) {return null;}\n"+
"public void set(Object obj, Object val) {}\n"+
"public Class getPropertyType() {return Void.class;}\n"+
"public boolean isPrimitive() {return true;}\n";

return (PropHandle)
   ClassBodyEvaluator.createFastClassBodyEvaluator(
   new Scanner(target+"__"+property, new StringReader(bodyText)),
   PropHandle.class, // Base type to extend/implement
   (ClassLoader)null); // Use current thread's context class loader

这是我的ORM的片段,它生成访问器。

如果您真的希望在字节码级别上工作,请尝试Javassist - 它有相当不错的界面。