我想使用一个方面来为一个私有id字段添加getter和setter。我知道如何通过一个 aspect 添加一个方法,但我如何访问私有 id 字段?
我认为我只需要让 aspect 成为 provileged。我尝试了下面的代码,但是aspect不能访问id字段。
public privileged aspect MyAspect {
public String Item.getId(){
return this.id;
}
一个可能的办法是像这篇博文中所示的用户反射。http:/blog.m1key.me201105aop-aspectj-field-access-toinejct.html。
反射是唯一的可能还是有办法用AspectJ来做?
你确定不能吗?我刚刚测试了一下,它运行了。这是我的完整代码。
package com.example;
public class ClassWithPrivate {
private String s = "myStr";
}
==========
package com.example.aspect;
import com.example.ClassWithPrivate;
privileged public aspect AccessPrivate {
public String ClassWithPrivate.getS() {
return this.s;
}
public void ClassWithPrivate.setS(String str) {
this.s = str;
}
}
==========
package com.example;
public class TestPrivate {
public static void main(String[] args) {
ClassWithPrivate test = new ClassWithPrivate();
System.out.println(test.getS());
test.setS("hello");
System.out.println(test.getS());
}
}
如果出于某种原因,这对你不起作用,你可以使用反射,或其他方法,如这里描述的。https:/web.archive.orgweb20161215045930http:/blogs.vmware.comvfabric201204using-aspectj-for-accessing-private-members-without-reflection.html。然而,根据基准,它可能不值得。