【问题标题】:Load-Time-Weaving differences between aspectj-weaver and spring-weaveraspectj-weaver 和 spring-weaver 之间的 Load-Time-Weaving 差异
【发布时间】:2011-06-22 08:33:04
【问题描述】:

我在使用 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 则会被忽略。不幸的是,如果我想要正确的方面弹簧集成,我必须使用弹簧编织器。我发现编织方面的唯一方法是围绕目标类的每个方法编织它并以编程方式过滤方面调用:

@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 aspectj load-time-weaving


    【解决方案1】:

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

    Spring AOP 是基于默认代理的。

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

    【讨论】:

    • 好吧,我的 spring sonfig 中有以下代码,通过这个我应该让 spring 动态创建代理:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多