ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

25-Spring-Aop注解开发

2021-04-27 21:59:50  阅读:178  来源: 互联网

标签:25 Spring jp System pointcut Aop println public out


基于注解的切面配置

1、配置xml,开启注解

2、定义切入点:前置

3、定义切入点:后置

4、定义切入点:环绕

5、定义切入点:异常

 

1、配置xml,开启注解

  //aop注解激活的
  <aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>

 //配置包扫描
  <!-- 告诉spring 注解在哪个位置 -->
  <context:component-scan base-package="com.nuc"/>

2、定义切入点:前置

package com.nuc.advice;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

import java.util.Arrays;

@Aspect
@Component
public class AdviceAop {
    //切入点
    @Pointcut("execution(* com.nuc..*.*(..))")
    public  void pointcut(){}

    //前置
    @Before("pointcut()")
    public void before(JoinPoint jp){
        System.out.println("调用"+jp.getTarget()+"的"+jp.getSignature().getName()+"方法" +"方法入参"+ Arrays.toString(jp.getArgs()));
    }

    //后置
    /*
    @AfterReturning(pointcut="pointcut()",returning="result")
    public void afterReturning(JoinPoint jp,Object result){
        System.out.println("调用"+jp.getTarget()+"的"+jp.getSignature().getName()+"方法"
                +"   方法返回值"+result);
    }
    */

    //环绕
    /*
    @Around("pointcut()")
    public  void around(){
    }
     */
    //异常
    /*
    @AfterThrowing(value = "pointcut()",throwing = "ex")
    public void afterThrowing(JoinPoint joinPoint,Exception ex){
    }
     */
}

3、定义切入点:后置

package com.nuc.advice;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

import java.util.Arrays;

@Aspect
@Component
public class AdviceAop {
    //切入点
    @Pointcut("execution(* com.nuc.serveriml.StudentDaoMapperServiceIml.getAllStudent(..))")
    public  void pointcut(){}

    //前置
    /*
    @Before("pointcut()")
    public void before(JoinPoint jp){
        System.out.println("调用"+jp.getTarget()+"的"+jp.getSignature().getName()+"方法" +"方法入参"+ Arrays.toString(jp.getArgs()));
    }
     */

    //后置
    @AfterReturning(pointcut="pointcut()",returning="result")
    public void afterReturning(JoinPoint jp,Object result){
        System.out.println("后置 afterReturning ");
        System.out.println("方法返回的结果是 result="+result);
    }


    //环绕
    /*
    @Around("pointcut()")
    public  void around(){
    }
     */
    //异常
    /*
    @AfterThrowing(value = "pointcut()",throwing = "ex")
    public void afterThrowing(JoinPoint joinPoint,Exception ex){
    }
     */

}

4、定义切入点:环绕

package com.nuc.advice;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

import java.util.Arrays;

@Aspect
@Component
public class AdviceAop {
    //切入点
    @Pointcut("execution(* com.nuc.serveriml.StudentDaoMapperServiceIml.getAllStudent(..))")
    public  void pointcut(){}

    //前置
    /*
    @Before("pointcut()")
    public void before(JoinPoint jp){
        System.out.println("调用"+jp.getTarget()+"的"+jp.getSignature().getName()+"方法" +"方法入参"+ Arrays.toString(jp.getArgs()));
    }
     */

    //后置
    /*
        @AfterReturning(pointcut="pointcut()",returning="result")
        public void afterReturning(JoinPoint jp,Object result){
            System.out.println("后置 afterReturning ");
            System.out.println("方法返回的结果是 result="+result);
        }
     */


    //环绕

    @Around("pointcut()")
    public  Object  around(ProceedingJoinPoint proceedingJoinPoint){
        Object result = null;
        try {
            // 前置通知
            String methodName = proceedingJoinPoint.getSignature().getName();
            System.out.println("1、方法的名字:"+methodName);
            System.out.println("1、这里是  前置通知");
            // 调用目标方法
            result = proceedingJoinPoint.proceed();
            // 后置通知
            System.out.println("2、方法的名字:"+methodName);
            System.out.println("2、这里是  后置通知");

        } catch (Throwable e) {
            // 这里是异常通知
            System.out.println("3、这里是  异常通知");
            e.printStackTrace();
        }
        System.out.println("4 、这里是一个  后置返回通知");
        return result;
    }

    //异常
    /*
    @AfterThrowing(value = "pointcut()",throwing = "ex")
    public void afterThrowing(JoinPoint joinPoint,Exception ex){
    }
     */

}

5、定义切入点:异常

package com.nuc.advice;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

import java.util.Arrays;

@Aspect
@Component
public class AdviceAop {
    //切入点
    @Pointcut("execution(* com.nuc.serveriml.StudentDaoMapperServiceIml.getAllStudent(..))")
    public  void pointcut(){}

    //前置
    /*
    @Before("pointcut()")
    public void before(JoinPoint jp){
        System.out.println("调用"+jp.getTarget()+"的"+jp.getSignature().getName()+"方法" +"方法入参"+ Arrays.toString(jp.getArgs()));
    }
     */

    //后置
    /*
        @AfterReturning(pointcut="pointcut()",returning="result")
        public void afterReturning(JoinPoint jp,Object result){
            System.out.println("后置 afterReturning ");
            System.out.println("方法返回的结果是 result="+result);
        }
     */


    //环绕
    /*
    @Around("pointcut()")
    public  Object  around(ProceedingJoinPoint proceedingJoinPoint){
        Object result = null;
        try {
            // 前置通知
            String methodName = proceedingJoinPoint.getSignature().getName();
            System.out.println("1、方法的名字:"+methodName);
            System.out.println("1、这里是  前置通知");
            // 调用目标方法
            result = proceedingJoinPoint.proceed();
            // 后置通知
            System.out.println("2、方法的名字:"+methodName);
            System.out.println("2、这里是  后置通知");

        } catch (Throwable e) {
            // 这里是异常通知
            System.out.println("3、这里是  异常通知");
            e.printStackTrace();
        }
        System.out.println("4 、这里是一个  后置返回通知");
        return result;
    }
    */

    //异常

    @AfterThrowing(value = "pointcut()",throwing = "ex")
    public void afterThrowing(JoinPoint joinPoint,Exception ex){
        System.out.println("这里是 异常通知");
        System.out.println(ex);
    }


}

 

标签:25,Spring,jp,System,pointcut,Aop,println,public,out
来源: https://blog.csdn.net/qq_34972069/article/details/116210342

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有