我在epast中使用了cglib,但坦率地说,我必须相信有一种比cglib中的回调数组和回调过滤器方法更方便的方法。我知道曾经有一个aspectwerkz代理。但它似乎已经在某处徘徊。
答案 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 - 它有相当不错的界面。