是否可以将Java中的外部类字段访问自动更改为getter / setter调用,还可以隐藏暴露的字段?我正在使用Javabeans,当字段属性发生变化时我想要更改通知(这很重要)。
我发现cglib可以自动将属性更改调用插入PropertyChangeSupport字段。我知道Project Lombok,但这似乎修改了源代码,另外不支持字段访问修改。或许对Lombok进行了修改,可以支持,还是有其他解决方案?
提前干杯谢谢, 克里斯
答案 0 :(得分:1)
最简单的选择是修改API客户端的来源。假设这不是一个选项,除非您至少可以控制客户端二进制文件并且可以使用字节码操作,否则无法以这种方式自动封装字段。如果你有这样的控制级别,那么是的,cglib可能是一个选项。但是,即使使用字节码操作,也无法拦截java.lang.reflect.Field.set,因此您需要保证不使用反射修改字段。
您最好的选择是打破API并引入setter / getters。这应该提醒您在创建API时始终使用适当的封装。
答案 1 :(得分:0)
AspectJ将允许您执行通知部分。您可以对类进行一些运行时编织,然后检测某人更改实例变量或调用方法然后执行您想要的任何操作。
这不是胆小的!!!
在不更改代码的情况下更改访问权限,不确定您的意思吗?