内容

  • 面向切面编程基本原理
  • 通过POJO创建切面
  • 使用@AspectJ注解
  • 为AspectJ切面注入依赖

关键词

  • 横切关注点(cross-cutting concern)
  • 继承 (inheritance)
  • 委托 (delegation)
  • 通知 (advice)
  • 切点 (pointcut)
  • 连接点 (join point)

4.1 面向切面编程

日志是应用切面的常见范例,其他常见还包括声明式事务、安全和缓存

那么什么是切面编程?

在代码中的一个地方定义通用功能,通过声明的方式被调用,而无需修改其他类。那么该模块化的特殊类,就被称之为切面(Aspect)。可以使关注代码集中管理,而不是分散式管理;服务模块更加简洁,更多的关注于核心代码,而切面类的代码就可以使次要关注点。

4.1.1 定义AOP术语

  • 通知 (advice)
  • 切点 (pointcut)
  • 连接点 (join point)

通知:切面的工作被称之为通知。通知定义了切面是什么以及何时使用,还解决了什么时候执行的问题。

五种类型的通知

名词 说明
前置通知(Before) 在目标方法被调用之前调用通知功能
后置通知(After) 在目标方法完成之后调用通知,此时不会关心方法的输出是什么
返回通知(After-returning) 在目标方法执行成功后通知
异常通知(After-throwing) 在目标方法抛出异常后通知
环绕通知(Around) 通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为。

连接点:是在应用执行过程中能够插入切面的一个点。这个点可以是调用方法时、抛出异常时、甚至是修改一个字段时。切面代码可以利用这些点插入到应用的正常流程之中,并添加新的行为。

切点:通知定义了“何时”和“什么”,那么切点就定义了“何处”。切点的定义通常会匹配通知所要织入的一个或多个连接点。通常会指定明确的类或者方法,但是也会使用正则等进行类和方法的匹配。

切面:切面=通知+切点;即阐明了“何时”在“何处”执行了“什么”。

引入(Introduction):引入允许我们向现有的类添加新方法或属性

织入(Weaving):织入是把切面应用到目标对象并创建新的代理对象的过程。切面在指定的连接点被织入到目标对象中。在目标对象的生命周期里有多个点可以进行织入。

  • 编译期:切面在目标类编译时被织入。
  • 类加载期:切面在目标类加载到JVM时被织入。
  • 运行期:切面在应用运行的某个时刻被织入。

4.2 切点表达式语言

AspectJ指示器 描述
arg 限制连接点匹配参数为指定类型的执行方法
@args() 限制连接点匹配参数为指定注解的执行方法
execution() 用于匹配时连接点的执行方法
this() 限制连接点匹配AOP代理的bean引用为指定类型的类
target 限制连接点匹配目标对象为指定类型的类
@target() 限制连接点匹配特定的执行对象,这些对象对应的类要具有指定类型的注解
within() 限制连接点匹配指定的类型
@within() 限制连接点匹配指定注解所标注的类型
@annotation 限制连接点匹配带有指定注解的连接点
 1. execution(* concert.Performance.perform(..))
* 为返回任意类型
concert.Performance为方法所属类
perform 方法
(..) 任意参数 2. execution(* concert.Performance.perform(..) &&(||、!) within(concert.*))
可以使用与或非和其他关系关联

四、Spring-面向切面编程的更多相关文章

  1. 快速高效掌握企业级项目中的Spring面向切面编程应用,外带讲面试技巧

    Spring面向切面编程(AOP)是企业级应用的基石,可以这样说,如果大家要升级到高级程序员,这部分的知识必不可少. 这里我们将结合一些具体的案例来讲述这部分的知识,并且还将给出AOP部分的一些常见面 ...

  2. Spring 面向切面编程(AOP)

    Spring 系列教程 Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of ...

  3. Spring——面向切面编程(AOP)详解

    声明:本博客仅仅是一个初学者的学习记录.心得总结,其中肯定有许多错误,不具有参考价值,欢迎大佬指正,谢谢!想和我交流.一起学习.一起进步的朋友可以加我微信Liu__66666666 这是简单学习一遍之 ...

  4. Spring面向切面编程(AOP)

    1 spring容器中bean特性 Spring容器的javabean对象默认是单例的. 通过在xml文件中,配置可以使用某些对象为多列. Spring容器中的javabean对象默认是立即加载(立即 ...

  5. 再学习之Spring(面向切面编程)

    一.概念 1.理论 把横切关注点和业务逻辑相分离是面向切面编程所要解决的问题.如果要重用通用功能的话,最常见的面向对象技术是继承(inheritance)或 组成(delegation).但是,如果在 ...

  6. Spring面向切面编程

    在使用面向切面编程时,我们可以在一个地方定义通用的共鞥,但是可以通过声明的方式定义这个功能要以何种方式在何处应用,而无需修改受影响的类.横切关注点可以被模块化为特殊的类,这些类被称为切面.这样的优点是 ...

  7. 详解Spring面向切面编程(AOP)三种实现

    一.什么是AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善. ...

  8. Spring面向切面编程(AOP,Aspect Oriented Programming)

    AOP为Aspect Oriented Programming的缩写,意为:面向切面编程(也叫面向方面),可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术. ...

  9. spring面向切面编程示例(xml配置形式vs@注解形式)

    一.xml配置形式 1.在Spring配置文件中增加面向切面配置当调用com.activemq.service.impl.ConsumerServiceImpl接口实现类的任意方法时执行切面类中的方法 ...

  10. JAVA Spring 面向切面编程 基本案例(AOP)

    < 1 > 配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&q ...

随机推荐

  1. 题解 CF588A 【Duff and Meat】

    题意 有一个人,想吃 $n$ 天肉,第 $i$ 天需要吃 $a[i]$ 块肉,第 $i$ 天超市肉价为每块 $b[i]$ 元,买来的肉可以留到后面吃,求这个人在每天都吃到肉的情况下花费的最小值. 题目 ...

  2. Centos7 team 绑定多网卡

    1.nmcli connection show 查看所有的网络连接 nmcli connection show 接下来我们要使用 ens37 ens38 两个网卡绑定 , 绑定的网卡取名: agg-e ...

  3. Vxlan L2

    VXLAN(Virtual eXtensible LAN可扩展虚拟局域网)诞生了,基于IP网络之上,采用的是MAC in UDP技术 跨三层实现二层通信 总结为何需要Vxlan: 虚拟机规模受到网络规 ...

  4. Linux下swap到底有没有必要使用

    周五看到QQ群里在讨论Linux主机上到底需不需要开启swap空间,而且目前公有云主机默认都是把swap关了的,很多公司也是没有开启swap,那到底需不需要开启呢? 我之前在看<鸟哥的Linux ...

  5. Envoy 基础教程:使用 Unix Domain Socket(UDS) 与上游集群通信

    Envoy Proxy 在大多数情况下都是作为 Sidecar 与应用部署在同一网络环境中,每个应用只需要与 Envoy(localhost)交互,不需要知道其他服务的地址.然而这并不是 Envoy ...

  6. CC2530应用——按键控制灯光状态变化

    独立新建工程并编写.编译代码,实现按键控制灯光闪烁状态的变换,实现以下任务要求:[1]程序开始运行:D4灯闪烁,D3.D5.D6灯熄灭.[2]按下模块上的SW1按键松开后,实现D5.D6灯轮流闪烁.[ ...

  7. MySQL基础总结(三)

    ORDER BY排序 ORDER BY默认是ASC(升序),降序是DESC LIMIT限制查询结果显示条数 LIMIT显示条数 LIMIT偏移量,显示条数 到目前为止有关查询数据的操作(DQL) 更新 ...

  8. java接口学习体会

    一.接口引进的意义 为了解决java的单继承不足,即java的类可以实现多个接口. 二.抽象类.接口的区别 三.如何创建接口? 声明接口的关键字是interface,声明类的关键字为class. im ...

  9. 【matlab 基础篇 03】一文带你全面了解 plot 绘图函数的使用(超详细+图文并茂)

    快速入门matlab,系统地整理一遍,如何你和我一样是一个新手,那么此文很适合你: 文章目录 1 前言 2 plot 2.1 显示正弦波 2.2 修改颜色 2.3 修改点的形状 2.4 修改线的形状 ...

  10. markdonwn 测试1

    标题测试 ## 二级标题 ### 三级标题 二级标题 三级标题 段落格式 换行 末尾两个空格 第一行第一行第一行第一行第一行第一行第一行第一行 第二行第二行第二行第二行第二行第二行第二行第二行 第一行 ...