Spring_19_AOP实现(3) 注解实现

AOP实现(3) 使用注解实现AOP

* 开启注解支持:  <aop:aspectj-autoproxy proxy-target-class="false"/>
  
     - aspectj-autoproxy 属性开启注解支持

     - proxy-target-class="false" 代表关闭CGLIB动态代理  使用自带JDK动态代理;

     - proxy-target-class="true"  代表使用CGLIB动态代理


* AOP中使用的注解

   @Aspect 将一个类标记为切入类,标注一个类是一个切面类

   @PointCut:公共切入点表达式

   @EnableAspectJAutoProxy : 开启基于注解的AOP模式

    - 前置通知(@Before)

    - 后置通知(@After)

    - 返回通知 (@AfterReturning)

    - 异常通知 (@AfterThrowing)

    - 环绕通知 (@Around)

    - ProceedingJoinPoint joinPoint: 作为方法的参数传入切面方法,可以得到目标方法的相关信息


   - 代码
    
        /**
         * 使用注解实现AOP
         * @Aspect 将一个类标记为切入类,标注一个类是一个切面
         */

        @Aspect
        public class AnnotationPointCut {

            @Before("execution(* com.shi.service.UserServiceImpl.*(..))")      // 添加切入点

            public void before(){
                System.out.println("=================切入方法执行前===================");
            }


            @After("execution(* com.shi.service.UserServiceImpl.*(..))")

            public void after(){
                System.out.println("=================切入方法执行后===================");
            }



           @Around("execution(* com.shi.service.UserServiceImpl.*(..))")

           public void around(ProceedingJoinPoint joinPoint) throws Throwable {
                System.out.println("================环绕前============");

                 //打印签名
                   System.out.println(joinPoint.getSignature());

                //执行方法
                  Object process = joinPoint.proceed();

                System.out.println("================环绕后============");

                System.out.println(process);
            }
上一篇:Spring基础学习


下一篇:基于XML的方式实现AOP