AOP的本质还是动态代理对方法调用进行增强。

  SpringBoot 提供了方便的注解实现自定义切面Aspect。

  1、使用需要了解的几个概念:

            切面、@Aspect

            切点、@Pointcut、

            通知、@Before/@After/@Around/@AfterReturning/@AfterThrowing

  2、Pointcut expression表达式规则 

    Pointcut 是指那些方法需要被执行"AOP",是由"Pointcut Expression"来描述的.
    Pointcut可以有下列方式来定义或者通过通配符&& || !的方式进行组合.

    args()、@args() 

    execution()

    this()

    target() 、@target()

       within()、@within()

    @annotation

举例说明:
  任意公共方法的执行:
  execution(public * *(..))

  任何一个以“set”开始的方法的执行:
  execution(* set*(..))‘


  AccountService 接口的任意方法的执行:
  execution(* com.xyz.service.AccountService.*(..))

  定义在service包里的任意方法的执行:
  execution(* com.xyz.service.*.*(..))

  定义在service包和所有子包里的任意类的任意方法的执行:
  execution(* com.xyz.service..*.*(..))

  定义在pointcutexp包和所有子包里的JoinPointObjP2类的任意方法的执行:
  execution(* com.test.spring.aop.pointcutexp..JoinPointObjP2.*(..))")
  ***> 最靠近(..)的为方法名,靠近.*(..))的为类名或者接口名,如上例的JoinPointObjP2.*(..))

  pointcutexp包里的任意类.
  within(com.test.spring.aop.pointcutexp.*)

  pointcutexp包和所有子包里的任意类.
  within(com.test.spring.aop.pointcutexp..*)

  实现了Intf接口的所有类,如果Intf不是接口,限定Intf单个类.
  this(com.test.spring.aop.pointcutexp.Intf)
  ***> 当一个实现了接口的类被AOP的时候,用getBean方法必须cast为接口类型,不能为该类的类型.

  带有@Transactional标注的所有类的任意方法.
  @within(org.springframework.transaction.annotation.Transactional)
  @target(org.springframework.transaction.annotation.Transactional)

  带有@Transactional标注的任意方法.
  @annotation(org.springframework.transaction.annotation.Transactional)
  ***> @within和@target针对类的注解,@annotation是针对方法的注解

  参数带有@Transactional标注的方法.
  @args(org.springframework.transaction.annotation.Transactional)

  参数为String类型(运行是决定)的方法.
  args(String)

    

这篇文章写得不错可参考:https://www.jianshu.com/p/fbbdebf200c9

SpringBoot AOP注解式拦截与方法规则拦截的更多相关文章

  1. SpringBoot —— AOP注解式拦截与方法规则拦截

    AspectJ是一个面向切面的框架,它扩展了Java语言.AspectJ定义了AOP语法,所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件. SpringBoot中AOP的使用 ...

  2. 《SpringMVC从入门到放肆》十一、SpringMVC注解式开发处理器方法返回值

    上两篇我们对处理器方法的参数进行了分别讲解,今天来学习处理器方法的返回值. 一.返回ModelAndView 若处理器方法处理完后,需要跳转到其它资源,且又要在跳转资源之间传递数据,此时处理器方法返回 ...

  3. Struts2拦截指定方法的拦截器

    作者:禅楼望月 默认情况下,我们为一个Action配置一个拦截器,该拦截器会拦截该Action中的所有方法,但是有时候我们只想拦截指定的方法.为此,需要使用struts2拦截器的方法过滤特性. 要使用 ...

  4. AOP注解式拦截

    1. 自己定义的拦截注解 package com.spring.aop; import java.lang.annotation.Documented; import java.lang.annota ...

  5. 10.SpringMVC注解式开发-处理器方法的参数

    1.逐个参数接收 只要保证请求参数名与该请求处理方法的参数名相同即可 // 请求参数名 与该处理器中的请求方法的参数名相同 ,即可接收前台传递过来的参数 public ModelAndView met ...

  6. 11.SpringMVC注解式开发-处理器方法的返回值

    处理器方法的返回值 使用@Controller 注解的处理器的处理器方法,其返回值常用的有四种类型 1.ModelAndView 2.String 3.void 4.自定义类型对象 1.返回Model ...

  7. SpringBoot aop 注解 数据权限校验

    注解类: @Retention(RetentionPolicy.RUNTIME) public @interface DataAuthValid { //位置 public int index() d ...

  8. springboot的注解声明过滤器配置错误导致拦截所有请求。

    究其原因, 原来spring 扫包时候 扫了Webfilter 注解,注册了一次过滤匹配路径,扫了Component注解(又注册了一次过滤匹配路径,默认是全路径). Component注解后于WebF ...

  9. springmvc 注解式开发 处理器方法的返回值

    1.返回void -Ajax请求 后台: 前台: 返回object中的数值型: 返回object中的字符串型: 返回object中的自定义类型对象: 返回object中的list: 返回object中 ...

随机推荐

  1. go 二进制数据处理

    以下是利用标准库binary来进行编解码 编码 ①使用bytes.Buffer来存储编码生成的串②使用binary.Write来编码存储在①的buf中 package main import ( &q ...

  2. oracle不记得所有账户和密码怎么办

    1.打开cmd,输入sqlplus /nolog,回车: 2.输入“conn / as sysdba”; 3.输入“alter user sys identified by 新密码:”,注意:必须输入 ...

  3. HDU 4578 线段树玄学算法?

    Transformation 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4578 Problem Description Yuanfang is p ...

  4. 剑指offer46:圆圈中最后剩下的数字(链表,递归)

    1 题目描述 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为牛客的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样的:首先,让小朋友们围成一个大圈.然后,他随 ...

  5. hadoop 》》 django 简单操作hdfs 语句

    >> from django.shortcuts import render # Create your views here. from hdfs.client import Clien ...

  6. LeetCode 答案(python)18-24

    18.四个数之和 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target ...

  7. 用shell脚本安装MySQL-5.7.22-官方版本多实例

    Install_CentOS7_MySQL57_multi_instance.sh #!/bin/bash #请提前准备好参数文件my.cnf PORT=3307 InitMySQL() { mkdi ...

  8. S02_CH08_ ZYNQ 定时器中断实验

    S02_CH08_ ZYNQ 定时器中断实验 上一章实现了PS接受来自PL的中断,本章将在ZYNQ的纯PS里实现私有定时器中断.每隔一秒中断一次,在中断函数里计数加1,通过串口打印输出. 8.1中断原 ...

  9. 这里除了安全,什么都不会发生!Docker镜像P2P加速之路

    1.1      问题: 在使用Docker运行容器化应用时,宿主机通常先要从Registry服务(如Docker Hub)下载相应的镜像(image).这种镜像机制在开发环境中使用还是很有效的,团队 ...

  10. .Net下二进制形式的文件存储与读取

    .Net下图片的常见存储与读取凡是有以下几种:存储图片:以二进制的形式存储图片时,要把数据库中的字段设置为Image数据类型(SQL Server),存储的数据是Byte[].1.参数是图片路径:返回 ...