【发布时间】:2016-10-13 09:47:21
【问题描述】:
在不打扰开发人员的情况下,我必须通过使用动态代理向方法(带注释的)添加功能吗?
经典例子:
public int sum(int x, int y){
StaticInstance.doThisBefore(x,y); // ccc
int result = x+y; // business functionality
StaticInstance.doThisAfter(result); // ccc
return result;
}
那么动态代理可以做什么。动态代理的问题在于,它具有侵入性。
- 注解处理器让您只创建新类而不修改现有类(我说的对吗?)
- 修改字节码?
- 编解码器?
- 无法使用代理。
开发人员可能正在使用 Spring 框架、Java EE 或任何他喜欢的框架,因此不影响开发人员代码的样式和方式非常重要。
因此,该选项应该是非侵入性的,这一点非常重要。
【问题讨论】:
-
您要修改源代码还是字节码?
-
看看AspectJ?
-
@ArcticLord 两种方式都是可能的——哪种方式最有效?有什么想法吗?
-
@DavidL 我已经检查过 AspectJ,但它更具侵入性,不是吗?
标签: java proxy code-injection