选择哪个库来在运行时生成类
我需要在运行时扩展类,特别是检测对类状态所做的更改。如果可能的话,我希望能够通过拦截字段分配来检测更改,如果不拦截设置器也可以。我应该使用哪个库以及为什么? javassist 或 cglib 或?这可以用 java.lang.reflect.Proxy 实现吗?你能比较一下这些库吗? 谢谢。
I need to extend classes at runtime, particularly to detect changes made to classes state. If it's possible I would like to be able to detect changes by intercepting field assignments, if not intercepting setters would be ok. Which library should I use and why ? javassist or cglib or ? Is this possible with java.lang.reflect.Proxy ? Can you compare these libraries ?
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
要拦截接口中定义的 setter,可以使用代理。
要拦截方法调用,您可以使用 AOP(如 AspectJ)。
然而,为了捕获字段分配,我会使用字节码库,如 ASM、BCEL、cglib 或 javassist。我更喜欢 ASM,它速度很快,并且有一些工具可以使编写字节代码更容易。
To intercept setters defined in an interface, you can use a Proxy.
To intercept method calls you can use an AOP like AspectJ.
However, to trap field assignments, I would use a byte code library like ASM, BCEL, cglib or javassist. I prefer ASM and it is fast and has some tools to make writing the byte code easier.