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

发布于 2024-10-18 20:46:22 字数 96 浏览 4 评论 0原文

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

I have ued cglib in th epast, but frankly I have to believe there is a more convenient way than the callback array and callback filter approach in cglib. I know there used to be an aspectwerkz proxy,. but it seems to have wandered away somewhere.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

莫言歌 2024-10-25 20:46:22

Javassist 允许使用 Java 代码片段对字节码进行编程:

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

Javassist allows programming bytecode with using Java code snippets:

CtClass point = ClassPool.getDefault().get("Point");
CtMethod m = CtNewMethod.make(
             "public int xmove(int dx) { x += dx; }",
             point);
point.addMethod(m);
海拔太高太耀眼 2024-10-25 20:46:22

如果您只想使用字节码进行最少程度的破坏的简单代理,请尝试 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 - 它具有相当不错的界面。

If you just want simple proxies with minimal amount of mucking with bytecode, try 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

That's a snippet from my ORM which generates accessors.

If you really wish to work on byte-code level, try Javassist - it has fairly nice interface.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文