Loading

第十九章 基于注解的AOP编程

1.基于注解的AOP编程步骤

  1. 原始对象

  2. 额外功能

  3. 切入点

  4. 组装切面

    将2 3 4步放在切面类中:
    
    定义切面类: @Aspect
    定义额外功能: @Around
    			原始方法的运行: ProceedingJoinPoint.proceed()
    定义切入点: @Around(* login(..))
    
    package com.dong.aspect;
    
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.Around;
    import org.aspectj.lang.annotation.Aspect;
    
    @Aspect
    public class MyAspect {
        @Around("execution(* login(..))")
        public Object around(ProceedingJoinPoint point) throws Throwable {
    
            System.out.println("----Aspect log--------");
            Object ret = point.proceed();
    
            return ret;
        }
    }
    
    <!--原始对象-->
    <bean id="userService" class="com.dong.aspect.UserServiceImpl"/>
    <!--
        切面
            1.额外功能
            2.切入点
            3.组装切面
    -->
    <bean id="around" class="com.dong.aspect.MyAspect"/>
    <!--告知Spring基于注解进行AOP编程-->
    <aop:aspectj-autoproxy/>
    

2.细节

  1. 切入点复用

    //在切面类中定义一个函数,加上注解@Pointcut 将切入点函数提取出来,利于切入点的复用
    
    @Aspect
    public class MyAspect {
    
        @Pointcut("execution(* login(..))")
        public void myPointcut() {
        }
    
        @Around(value = "myPointcut()")
        public Object around(ProceedingJoinPoint point) throws Throwable {
            System.out.println("----Aspect log--------");
            Object ret = point.proceed();
    
            return ret;
        }
    
        public Object around2(ProceedingJoinPoint point) throws Throwable {
            System.out.println("----new Aspect log------");
            Object ret = point.proceed();
            
            return ret;
        }
    }
    
  2. 动态代理的创建方式

    AOP的底层实现 动态代理的两种创建方式
    1. JDK
    2. CGlib
    
    默认情况下,AOP编程,底层应用JDK动态代理创建方式
    如果切换CGlib
    		1. 基于注解的AOP开发
    			<aop:aspectj-autoproxy proxy-target-class="true"/>
    			false是默认情况,使用JDK创建代理对象
    		2. 传统的AOP开发
    			<aop:config proxy-target-class="true">
    
posted @ 2022-07-24 16:49  苏无及  阅读(58)  评论(0编辑  收藏  举报