问题描述
我这里做了一个简单的基于注解驱动的demo,想学习aop,遇到一个奇怪问题,为什么我加了AnnotationAwareAspectJAutoProxyCreator以后,advice就执行了2次,不加就正常的执行了一次,请看代码:这个是最基本的一个Servicepackage com.demo;import org.springframework.stereotype.Service;@Servicepublic class UserService {public void add(){System.out.println("add method..");}}这个是我的advicepackage com.demo;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.springframework.stereotype.Component;@Aspect@Componentpublic class UserAdvice {private static int n = 1;@Before("execution (* com.demo.UserService.add(..))")public void test(){System.out.println("advice test method n = "+n);n++;}}这个是我的执行方法:package com.demo;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Main {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); UserService service =(UserService) context.getBean("userService"); service.add();}}这个是我的spring配置文件(bean.xml)中最精简的说明:引用
解决方案
他们都是动态代理你写AnnotationAwareAspectJAutoProxyCreator就不需要写<aop:aspectj-autoproxy></aop:aspectj-autoproxy>