我正在研究AspectJ
它的许多用途,并已发现mixins
。
我可以找到许多使用纯AspectJ
.aj
方面的示例,但是我只需要使用@AspectJ
注释即可。
我要实现的目标如下:
我有一个无法修改的类,它具有一个私有类变量,在完成特定的类方法后,我需要查询该私有类变量。此类没有与此私有类变量关联的getter或setter方法。
public final class CannotAmend {
private Uri privateUri;
public final void methodOne(){}
public final void methodTwo(){}
public final void methodThree(){
privateUri = "something";
}
}
我需要一个可以捕获@After
methodThree()
并允许我查看中设置的值的Aspect / mixin privateUri
。
这有可能实现吗?
有@AspectJ
注解吗?
在哪里可以找到实现此目的的文档/教程/示例?
在一个方面,您可以使用反射API访问私有字段。
在这方面,您需要两件事:
@After
包含逻辑的方法,该逻辑在切入点匹配的方法返回之后执行。@Aspect
public class MyAspect {
@Pointcut("execution(* CannotAmend.methodThree(..))")
public void methodThreePointcut(){
}
@After("methodThreePointcut()")
public void afterMethod(JoinPoint joinPoint) throws NoSuchFieldException, IllegalAccessException {
Object instance = joinPoint.getThis();
Field privateUriField = instance.getClass().getDeclaredField("privateUri");
privateUriField.setAccessible(true);
String privateUri = (String) privateUriField.get(instance);
System.out.println(privateUri); // prints "something"
}
}
附带说明一下,使用String常量访问私有字段并不是一个干净的解决方案。如果将来某个时候变量的名称发生更改或被删除,则外观将中断。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句