2

是否可以将 Java 中的外部类字段访问自动更改为 getter / setter 调用,并隐藏暴露的字段?我正在使用 Javabeans,并且我希望在字段属性更改时更改通知(这很重要)。

我发现cglib可以自动将属性更改调用插入到 PropertyChangeSupport 字段。我知道Project Lombok,但这似乎修改了源代码,另外不支持字段访问修改。也许通过对 Lombok 的修改,这可以得到支持,或者是否有其他解决方案?

提前干杯和感谢,克里斯

4

2 回答 2

1

最简单的选择是修改 API 客户端的源。假设这不是一个选项,除非您至少可以控制客户端二进制文件并且可以使用字节码操作,否则无法以这种方式自动封装字段。如果你有那个级别的控制,那么是的,cglib 可能是一个选择。但是,即使使用字节码操作,也无法拦截 java.lang.reflect.Field.set,因此您需要保证没有使用反射修改字段。

您最好的选择是打破 API 并引入 setter/getter。这应该提醒您在创建 API 时始终使用正确的封装。

于 2010-04-25T21:17:36.153 回答
0

AspectJ 将允许您执行通知部分。您可以对类进行一些运行时编织,然后检测何时有人更改实例变量或调用方法,然后采取您想要的任何操作。
这不适合胆小的人!

不确定在不更改代码的情况下更改访问权限是什么意思?

于 2010-04-25T23:16:00.333 回答