例如,我有一个带有公共字段和相应的getter / setter的类:
public class User {
public String name;
public String getName() { return name; }
public void setName(String name) { this.name = name;}
}
现在调用字段name
:
User user = new User();
user.name = "test";
System.out.println(user.name);
是否能够使用aspectj来增强类以使字节码为:
User user = new User();
user.setName("test");
System.out.println(user.getName());
我知道javassist可以做到这一点,但AspectJ可以做同样的事吗?
答案 0 :(得分:2)
查看pointcut docs以及get(FieldPattern)
和set(FieldPattern)
切入点。
答案 1 :(得分:2)
User user = new User();
user.setName("Bob"); //<- This line matched the pointcut below
user.name = "Alex"; //<- This line too matched the pointcut below
System.out.println("User name is " + user.name);
对于User类主方法中的上述代码,我写了下面的Aspect
public aspect UserAspect {
public pointcut propSet() : set(* User.*);
void around() : propSet(){
System.out.println(thisJoinPoint.getSignature() + " is being set");
proceed();
}
}
输出是..
String test.User.name is being set
String test.User.name is being set
User name is Bob
所以,我的理解是AspectJ以相同的方式处理成员变量赋值和setter。所以,你可能无法用Javassist
做什么