Reflection + AOP - 通过调用调用方法时不会截获的建议

时间:2017-12-01 09:44:40

标签: java reflection spring-aop

通过反思:

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()

进行呼叫时,通常会截获周围的建议

请,任何想法?

1 个答案:

答案 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()