关于AOP,通常我们会使用AspectJ注解来做,共有6中切面

  • 前置:@Before
  • 后置:@After
  • 返回值:@AfterReturing
  • 异常:@AfterThrowing
  • 环绕:@Around:可以理解为以上四种的集合
  • 引用(不常用)

比较难理解的两个部分:

  • 连接点:JoinPoint、ProceedJoinPoint

    • 连接点其实就是切面表达式覆盖的方法,根据该连接点可以获取多个信息,常用的如下:

      • getSignature():获取当前方法的返回值、全类名、参数类型,例:Shop com.xxx.firstboot.dao.ShopDao.getShop(int)
      • getTarget():获取当前方法所属的类实例,例:com.xxx.firstboot.dao.ShopDao@72f97c4f
      • getArgs():获取当前方法的参数,例:[Ljava.lang.Object;@6fbd538a
    • JoinPoint习惯性的用在除了@Around中,ProceedJoinPoint习惯性的用在@Around中(因为需要使用ProceedJoinPoint的proceed()方法进行目标方法的执行)
  • 切点表达式:
    • execution(* com.xxx.firstboot.dao.*.*(..))只需要记住这一个就可以

      • 第一个*:代表任意权限和返回类型,例:public Shop,如果需要明确指定,就指定
      • 第二个*:代表这个包下的所有类,例:ShopDao,如果需要明确指定,就指定
      • 第三个*:代表类下的所有方法,例:getShop,如果需要明确指定,就指定
      • ..:代表方法的入参类型可以是任意类型、任意数量(包括0个)的,例:int,如果需要明确指定,就指定
    • 切点表达式就是方法(连接点)的匹配表达式

两个补充点:

    • 多个切面可以通过@Order(数字)这个注解来制定织入顺序,例:@Order(1),数字越小,越先织入,该注解用在切面上(即切面类上)
    • 切点表达式可以重用,如下会演示

from: https://www.cnblogs.com/java-zhao/p/5415893.html

第一章 AOP的更多相关文章

  1. Spring3实战第一章 Aop 切面 XML配置

    刚看spring3实战书籍第一章  切面以前没有关注过 现在看到了  随手试验一下 AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Objec ...

  2. SSM-1第一章 认识SSM框架和Redis

    第一章 认识SSM框架和Redis   1.1 Spring框架 Sring理念  Ioc  控制反转  IOC是一个容器,在Spring中,它会认为一切Java资源都是JavaBean,容器的目标是 ...

  3. spring第一章

    spring第一章 一.概述 Spring是一个开源框架,它由Rod Johnson创建.它是为了解决企业应用开发的复杂性而创建的.Spring使用基本的JavaBean来完成以前只可能由EJB完成的 ...

  4. Java开发工程师(Web方向) - 04.Spring框架 - 第3章.AOP技术

    第3章--AOP技术 Spring框架 - AOP概述 笔记https://my.oschina.net/hava/blog/758873Spring框架 - AOP使用 笔记https://my.o ...

  5. Spring实战第一章学习笔记

    Spring实战第一章学习笔记 Java开发的简化 为了降低Java开发的复杂性,Spring采取了以下四种策略: 基于POJO的轻量级和最小侵入性编程: 通过依赖注入和面向接口实现松耦合: 基于切面 ...

  6. Spirng学习指南-第一章(完)

    Spring学习指南 内容提要 ​ Spring框架是以简化J2EE应用程序开发为特定目标而创建的,是当前最流行的Java开发框架. ​ 本书从介绍Spring框架入手,针对Spring4.3和Jav ...

  7. 第05章 AOP细节

    第05章 AOP细节 1.切入点表达式 1.1 作用 通过表达式的方式定位一个或多个具体的连接点. 1.2 语法细节 ①切入点表达式的语法格式 execution([权限修饰符] [返回值类型] [简 ...

  8. 《Django By Example》第一章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:本人目前在杭州某家互联网公司工作, ...

  9. MyBatis3.2从入门到精通第一章

    第一章一.引言mybatis是一个持久层框架,是apache下的顶级项目.mybatis托管到goolecode下,再后来托管到github下.(百度百科有解释)二.概述mybatis让程序将主要精力 ...

随机推荐

  1. 如何删除 Win10此电脑 desktop 视频 图片 文档 下载 音乐等文件夹

    更改注册表; 1. WIN+R   输入[regedit]  打开注册表管理器 2. 找到路径[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curren ...

  2. JS代码浏览器兼容性 之 new Date()

    这里只测试3个浏览器的情况:IE, 火狐,谷歌. 一. 无参 //无参 var dateTime = new Date(); 所有浏览器都兼容,GOOD 二. 日期参数 //日期参数 格式1 var ...

  3. P1203 [USACO1.1]坏掉的项链Broken Necklace

    P1203 [USACO1.1]坏掉的项链Broken Necklace不错的断环为链的模拟题,开成三倍,有很多细节要考虑,比如总长度要<=n,开头第一个是w等等. #include<bi ...

  4. python3之Django模型(一)

    1.模型概述 模型是关于您的数据的唯一,明确的信息来源,它包含您正在存储的数据的重要字段和行为.通常,每个模型映射到单个数据库表. 每个模型都是一个子类的python类django.db.models ...

  5. InnoDB的锁机制浅析(三)—幻读

    文章总共分为五个部分: InnoDB的锁机制浅析(一)-基本概念/兼容矩阵 InnoDB的锁机制浅析(二)-探索InnoDB中的锁(Record锁/Gap锁/Next-key锁/插入意向锁) Inno ...

  6. normalizr实践使用(个人总结,仅供参考)

    # normalizr实践使用 原数据 (自编数据,本数据仅供参考) var aaaObj ={ "id" : "0000000000000000000000000000 ...

  7. .NET 4.0 和 .NET 4.0 Client Profile 区别

    Visual Studio 2010如期发布了,我怀着迫不及待的心情马上下载了最新的ISO来安装和感受一下. .NET Framework 自从 2002 年发展至今,已经历了好几个版本,1.0, 1 ...

  8. "Unchecked-Send"漏洞分析

    author:sf197tl;dr国内并没有一个文档有讲述该漏洞的,正好闲着没事.就写下这篇文章.在网上也搜寻了一些资料,通过自己的翻译才有今天的这篇文章.该漏洞在DASP TOP 10中可以查看到. ...

  9. [JZOJ4786]小a的强迫症

    [JZOJ4786]小a的强迫症 题目大意: 有\(n(n\le10^5)\)种颜色的珠子,第\(i\)种颜色有\(num[i]\)个.你要把这些珠子排成一排,使得第\(i\)种颜色的最后一个珠子一定 ...

  10. 快速排序的C++实现

    版权声明:本文为博主原创文章,未经博主允许不得转载. 快速排序的C++实现 int Partition(int a[], int low, int high) { int x = a[high];// ...