不会触发针对第三方JAR类的切入点

时间:2015-07-25 16:54:57

标签: java spring aop aspectj spring-aop

作为错误https://github.com/spring-projects/spring-hateoas/issues/220的临时修复,我想修改org.springframework.hateoas.core.AnnotationMappingDiscoverer.getMapping方法的返回值,以便我可以手动解析占位符。这是我尝试过的方面:

<aop:aspectj-autoproxy />
@Component
@Aspect
public class AnnotationMappingDiscovererFix {

  @Around("execution(* org.springframework.hateoas.core.AnnotationMappingDiscoverer.getMapping(..))")
  public Object resolvePlaceholders(ProceedingJoinPoint joinPoint) throws Throwable {
    Object mapping = joinPoint.proceed();
    // resolve placeholders manually...
    return mapping;
  }

}

但这个切入点从未被触发,任何想法为什么?

1 个答案:

答案 0 :(得分:0)

使用基于代理的Spring AOP,您只能定位Spring bean /组件。我不是Spring用户,所以我不确定,但我不认为你可以通过自己的AOP框架实际拦截Spring框架类,因为“hen vs. egg”引导问题。

但是如果你通过加载时编织(LTW)使用完整的AspectJ,你应该能够实现你想要的,因为在Spring类之前加载了AspectJ编织代理( aspectjweaver.jar )因此可以在类加载阶段修改它们。 Spring documentation解释了如何将AspectJ与Spring结合使用。