我在使用spring和使用AspectJ进行Load-Time-Weaving时遇到了一些奇怪的问题。
在我的一个Apsect中,我想对org.springframework.flex.security3.SpringSecurityLoginCommand类的“ doAuthentication”方法的调用做出反应。因此,我创建了一个方法:

@Around("execution(* org.springframework.flex.security3.SpringSecurityLoginCommand.doAuthentication(..))")
public Object aroundDoAuthentication(ProceedingJoinPoint pjp) throws Throwable {
...


如果使用aspectj-weaver代理,则可以正确编织此方面,但是如果使用spring-weaver,则可以忽略此方面。不幸的是,如果我想要正确的方面-弹簧集成,我必须使用spring-weaver。我发现编织方面的唯一方法是将其围绕目标类的每种方法进行编织,并以编程方式过滤方面调用:

@Around("execution(* org.springframework.flex.security3.SpringSecurityLoginCommand.*(..))")
public Object aroundDoAuthentication(ProceedingJoinPoint pjp) throws Throwable {
    final String methodName = pjp.getSignature().getName();
    if("doAuthentication".equals(methodName)) {
    ...


使用上面的代码,我设法正确地编织了每一个东西,但是我对此并不满意,因为这对我来说似乎是一个很大的麻烦。

谁能解释为什么使用Spring-Weaver我无法编织出与AspectJ-weaver相同的东西?

克里斯

最佳答案

我不知道代码,但这似乎是一个古老的问题。

Spring AOP是基于默认代理的。

这意味着只有来自bean外部的方法的调用才能通过代理。因此,只有此调用才能触发AOP建议。

07-28 03:19