通过反思:
Class c = Class.forName("mypackage.DiodeService");
Method m = c.getDeclaredMethod("blink");
Object t = c.newInstance();
Object o = m.invoke(t);
调用DiodeService的方法:
@ValueGreaterThan
public void blink(){
log.info("Diode service: blink()");
}
关于注释@ValueGreaterThan正在倾听方面:
@Around(value = "mypackage.CommonJoinPointConfig.valueGreaterThanAspect())") public void around(ProceedingJoinPoint joinPoint) throws Throwable {
log.info("Value greater than aspect {}", joinPoint); }
但是:当通过"调用"来调用方法时,周围的建议永远不会被截获。
通过diodeService.blink()
请,任何想法?
答案 0 :(得分:0)
由于Spring框架的基于代理的性质,Spring AOP基于运行时编织。这意味着目标bean是Spring管理的bean。在Spring运行时,bean被转换为代理。
如果DiodeService
是 Spring代理(由Spring管理),Spring AOP将按预期正常工作,即建议将被截获< / strong>对blink
的任何来电。
blink
的建议永远不会被拦截如果DiodeService
直接实例化而不是通过Spring。通过调用DiodeService
,
newInstance
时就是这种情况
Object t = c.newInstance()