eclipse使用AspectJ时,在@Before修饰的方法中对该类的成员变量赋值后,在PointCut所在方法中获取该成员变量为空
时间: 2024-03-23 08:36:14 浏览: 77
在Android项目中使用AspectJ的方法
这个问题可能是因为AspectJ使用的是动态代理,会对目标对象进行代理,所以在@Before修饰的方法中对该类的成员变量赋值后,实际上是对代理对象中的成员变量进行了赋值,而在PointCut所在方法中获取该成员变量时,实际上是获取的目标对象中的成员变量,因此获取到的是空值。
解决这个问题的方法是,在@Before修饰的方法中获取目标对象,然后通过目标对象来对成员变量进行赋值。例如:
```
@Before("execution(* com.example.demo.service.*.*(..))")
public void before(JoinPoint joinPoint) {
Object target = joinPoint.getTarget();
if (target instanceof DemoService) {
DemoService service = (DemoService) target;
service.setMemberVariable("value");
}
}
```
这样就可以在PointCut所在方法中获取到赋值后的成员变量了。
阅读全文