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. Mybatis Plus带多条件的多表联合、分页、排序查询

    目录 一.现有表 student学生表: facultylist学院表: 二.同时满足以下需求: 1.多表联合查询出学院名字 2.可以带多条件查询 3.指定页码,页数据大小进行物理分页查询 三.解决步 ...

  2. Photon Server初识(五) --- 客户端连接服务端

    准备:Unity开开发IDE. 一.新建Unity3D项目 导入包,在资源下新建目录 Plugins .在之前解压的SDK目录 lib中找到 Photon3Unity3D.dll,拖到新建的目前下 二 ...

  3. nginx浏览器开启密码验证

    如果我们在 nginx 下搭建了一些站点,但是由于站点内容或者流量的关系,我们并不想让所有人都能正常访问,那么我们可以设置访问认证.只有让用户输入正确的用户名和密码才能正常访问.效果如下: 在 ngi ...

  4. 阿里云Centos7 配置二级域名

    之前在自己的服务器上安装了laravel,现在给它个二级域名!结果发现了个小坑= =.不说了,上步骤 首先你要有个自己的域名,可以在万网上买一个,我的还是蛮便宜的... 进入你的阿里云管理台 选择云解 ...

  5. springboot中的参数传递

    1.前端传递到后端 1-1.js function add(){ var obj = {}; obj.parame_empname = $("#EMPNAME").val(); i ...

  6. ItemsControl使用1

    <ItemsControl ItemsSource="{Binding DataItemsSource}"> //绑定一个List <ItemsControl.I ...

  7. 出现 HTTP 错误 500.19 错误代码 0x800700b7

    这个内容出现主要问题是在IIS上,我们一般程序开发 iis中默认的路径只是http://localhost/,相当于环境变量中已定义好了,如果自己创建的项目直接将路径定义到这,就会替换图二中的路径,然 ...

  8. Django rest-framework框架-解析器

    解析器: 开始: django: request.POST/ request.body 满足一下两个要求POST中才有值 1. 如果请求头中的 Content-Type: application/x- ...

  9. 一个SDL2.0程序的分析

    //把图片加载到SDL_Texture SDL_Texture* loadTexture(const std::string &file, SDL_Renderer *ren){       ...

  10. npm install 报错踩坑路

    先出现的是超过最大调用栈问题: npm ERR! Maximum call stack size exceeded 百度之后说给npm降级或者升级 降级 : npm install -g npm@5. ...