注意:使用AOP需要额外的导入3个包。

1.使用spring,需要设置schema--->需要有如下的schema

xmlns:aop="http://www.springframework.org/schema/aop"

xsi:schemeLocation="http://www.springframework.org.schema/aop

                              http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"

2.打开基于Annotation的AOP

  <aop:aspectj-autoproxy/>

3.创建一个AOP的关注点(创建一个类,名为LogAspect),这就是我们的切面,切面是做什么的,就是把我们关注的问题拿出来,做一个模块

  里面的方法logStart()、logEnd()、logAround()都是advice(或者叫通知)。通知有三种注解,@Before、@After、@Around

  @Before:我们在下面示例中的logStart()方法前面加上了该注解,并用execution表达式在那些类的那些方法执行之前调用执行logStart()方法。

  我们为logStart()方法加入了一个参数JoinPoint jp,该参数是被自动传入的。我们可以通过该参数获得,是哪个类在执行,哪个方法在执行。

  @After:我们在下面示例中的logStart()方法前面加上了该注解,并用execution表达式在那些类的那些方法执行之后调用执行logEnd()方法。

  @Around:我们在下面示例中的logStart()方法前面加上了该注解,并用execution表达式在那些类的那些方法执行过程中调用执行logAround()方法。

  我们为logAround()方法传入了一个参数ProceedingJoinPoint pjp,该参数也是被自动传入的。我们可以通过这个参数,来控制实际方法的执行。

  

//LogAspect类叫做切面
@Component("logAspect")//让这个切面类被Spring所管理
@Aspect//声明这个类是一个切面类
public class LogAspect{
    //logStart叫做通知
    /**
     *第一个*表示任意返回值(后面有一个空格)
     *第二个*表示org.zttc.itat.spring.dao包中的所有类
     *第三个*表示以add开头的所有方法
     *(..)表示任意参数
    @Before("execution(* org.zttc.itat.spring.dao.*.add*(..))||"+
                  "execution(* org.zttc.itat.spring.dao.*.delete*(..))||"+
                  "execution(* org.zttc.itat.spring.dao.*.update*(..))")
    public void logStart(JoinPoint jp){
        //得到执行的对象
        System.out.println(jp.getTarget());
        //得到执行的对象
        System.out.println(jp.getSignature().getName());
        Logger.info("加入日志");
    }  

    @After("execution(* org.zttc.itat.spring.dao.*.add*(..))||"+
                  "execution(* org.zttc.itat.spring.dao.*.delete*(..))||"+
                  "execution(* org.zttc.itat.spring.dao.*.update*(..))")
    public void logEnd(JoinPoint jp){
        Logger.info("方法调用结束加入日志");
    }  

    @Around("execution(* org.zttc.itat.spring.dao.*.add*(..))||"+
                  "execution(* org.zttc.itat.spring.dao.*.delete*(..))||"+
                  "execution(* org.zttc.itat.spring.dao.*.update*(..))")
    public void logAround(ProceedingJoinPoint pjp){
        Logger.info("开始在around中加入日志");
        //让程序执行
        pjp.proceed();
        Logger.info("结束around");
    }  
}

 

posted on 2016-06-06 22:15  Mr.He多多指教  阅读(202)  评论(0编辑  收藏  举报