Spring -- AOP

AOP

1. 概念理解:

面向切面编程,通过预编译和运行期动态代理实现程序功能的统一维护的一种技术;

AOP是OOP的延续,是软件开发的一个热点,是函数式编程的一种衍生规范。

利用AOP可以对业务逻辑的各个部分进行分割;

1.1 要解决的问题:

代码重复

关注点分离

把非功能性需求剥离出来

 

image.png

 

1.2 应用场景:

image.png

2.AOP编程范式

 注解:用来标注该java类是一个切面类

 由  和advice两部分组成

 定义在何处植入代码,哪些类或哪些方法上

Advice 是指想要在方法执行的什么时机来植入,执行之前or执行之后?

 

 

2.1 组成:

image.png

 

2.1.2 Pointcut expression

 

image.png

 

designators

指示器,通过什么样的方式去匹配你想要的java类的哪些方法

重点掌握execution()部分

image.png

 

 

wildcards 

通配符,不用一一列举,匹配就可以扫描到

  • * 匹配任意数量的字符
  • + 匹配指定类及其子类
  • …匹配任意数的子包或参数

Operators

 

2.2 pointcut匹配

2.2.1 匹配包/类型

 

image.png

 

2.2.2 匹配对象

this指的是目标对象的代理对象

一个原始对象会经过你aop的代理生成一个代理对象,

this指的是代理对象

target指的是原始对象

在没有introduction时,this与target没有什么区别,

有introduction时,target拦截不到introduction自动生成的方法,this可以拦截到。

 

image.png

 

2.2.3 匹配参数

匹配参数符合条件的方法进行拦截

image.png

 

2.2.4 匹配注解

 

image.png

 

2.2.5 execution匹配的格式

image.png

 

eg:

@Pointcut("execution(public * com.imooc.service..*Service.*(..) throws java.lang.IllegalAccessException)")

拦截修饰符为public,返回值类型* 任意类型,imooc.service.*Service 包下以service结尾的类,..表示包含子包

*(..)表示所有方法,任意参数的方法

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页