春季4 +方面

时间:2015-02-26 18:09:00

标签: spring aspectj spring-aop

我有各方面的问题。他们没有开火。我有一个小方面:

@Aspect
@Component
public class SynchronizingAspect {
    @Pointcut("execution(public * *(..))")
    @Around("synchronize() && @annotation(Synchronized)")
    public void synchronize(ProceedingJoinPoint joinPoint) throws Throwable {
        Logger.getGlobal().log(Level.SEVERE, "LOOOOOOOOL");
        joinPoint.proceed();        

    }
}

和带注释的方法:

@Synchronized
@Transactional
@Override
public User create(Map<String, Object> values) {
    return super.create(values); 
}

在我的配置文件中

<aop:aspectj-autoproxy />

我使用的是弹簧4.1.5

和aop的依赖关系:

<dependency>
<groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
        </dependency>

    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>1.6.11</version>
    </dependency>

    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.6.11</version>
    </dependency>

如果有人能告诉我它为什么不起作用并帮助我修复它,我将非常感激。

祝你好运, 太

2 个答案:

答案 0 :(得分:1)

似乎@Transactional create方法干扰了您的自定义方面。

尝试在您的方面指定@Order,如下所示。这将使执行顺序的方面更高于@Transactional的方面。 (请注意,参数值1是任意的,以覆盖订单的默认lowest precedence设置

@Aspect
@Component
@Order(1)
public class SynchronizingAspect { ... }

答案 1 :(得分:1)

我做到了。我删除<aop:aspectj-autoproxy />并使用@EnableAspectJAutoProxy,现在这样做了。谢谢你的回复!