xml配置文件

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop
        https://www.springframework.org/schema/aop/spring-aop.xsd">
   <!--配置IOC-->
   <bean id="userdaoimpl" class="daoImpl.UserDaoImpl"/>

   <bean id="logger" class="utils.Logger"/>
   <aop:config>
      <!--
         配置切入点表达式:
            id:唯一标识
            expression:切入点表达式
            此标签写在局部aop:aspect中时只能当前切面使用
            也可以写在aop:config的最前面当做全局pointcut
      -->
      <aop:pointcut id="pc1" expression="execution(* daoImpl.UserDaoImpl.*(..))"/>
      <aop:aspect id="loggerAdvice" ref="logger">

         <!--
            注意:后置通知和异常通知是互斥的
         -->
         <!--前置通知:在切入点方法执行之前执行-->
<!--         <aop:before method="log1" pointcut-ref="pc1"/>-->
<!--         <!–后置通知:在切入点方法正常执行之后执行–>-->
<!--         <aop:after-returning method="log2" pointcut-ref="pc1"/>-->
<!--         <!–异常通知:在切入点方法产生异常的时候执行–>-->
<!--         <aop:after-throwing method="log3" pointcut-ref="pc1"/>-->
<!--         <!–最终通知:无论切入点方法是否正常执行,都会最后执行的方法–>-->
<!--         <aop:after method="log4" pointcut-ref="pc1"/>-->

         <!--配置环绕通知-->

         <aop:around method="log5" pointcut-ref="pc1"/>
      </aop:aspect>
   </aop:config>
</beans> 

具体通知类Logger

 package utils;

import org.aspectj.lang.ProceedingJoinPoint;

public class Logger {

    public void log1(){
        System.out.println("前置通知");
    }
    public void log2(){
        System.out.println("后置通知");
    }
    public void log3(){
        System.out.println("异常通知");
    }
    public void log4(){
        System.out.println("最终通知");
    }

    /**
     * 环绕通知
     *      这是spring框架提供的一种可以手动设置增强代码怎样执行的方式
     * @param pjp
     * @return
     */
    public Object log5(ProceedingJoinPoint pjp){
        Object value = null;
        try {
            Object[] args = pjp.getArgs();//获得切入点方法的参数
            System.out.println("这里是前置通知");
            value = pjp.proceed(args);//明确调入切入点方法
            System.out.println("这里是后置通知");
            return value;
        }catch (Throwable e){
            System.out.println("这里是异常通知");
            throw new RuntimeException("发生异常!信息:");
        }finally {
            System.out.println("这里是最终通知");
        }
    }
} 

最后修改日期:2020-07-13

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。