Spring AOP 的实现方式

简介: Spring AOP 的几种实现方式

Spring aop 实现主要分为:


  • 经典的Spring aop
  • 纯pojo的
  • aspectj (aop)注解
  • 基于 aspectj实现的


1、经典的Spring aop实现

1.1、被代理的目标接口类极其实现。

image.pngimage.png

1.2、通知(增强处理)类

image.png

1.3、代理类

image.png


1.4、xml配置:

image.png


测试:

image.png


2、使用组件之间的连接配置。(POJO)


2.1、目标类(不是接口)

image.png


2.2、通知(增强)类

image.png


2.3 xml配置

image.png


切点表达式:

execution表达式解释

execution(* com.wangning.aspect..*.*(..))

符号 

含义

execution()

表达式的主体;

第一个”*“符号 

表示返回值的类型任意;

com.wangning.aspect

AOP所切的服务的包名,即,我们的业务部分

包名后面的”..“ 

表示当前包及子包

第二个”*“ 

表示类名,*即所有类。此处可以自定义,下文有举例

.*(..) 

表示任何方法名,括号表示参数,两个点表示任何参数类型


方法执行之后(返回值 或者 异常)


修改目标类

image.png


通知类  添加方法

image.png


xml 配置

image.png


测试(同上)


1.成功时

image.png

2.抛出异常时

image.png




AspectJ 切点表达式

AspectJ 指示器

 描述

arg()

限制连接点匹配参数未指定类型的执行方法

@args()

限制连接点匹配参数为指定注解标注的执行方法

execution

用于匹配是执行方法

this()

限制连接点匹配AOP代理的bean引用为指定类型的类

target

限制连接点匹配目标对象为指定类型的类

@target()

限制连接点匹配特定的执行对象,这些对象对应的类要具有指定类型的注解






aop 处理 传进来的参数,处理返回值

args():1、限制拦截方法 2、通过参数名把核心方法参数值传入通知中 args-name="通知方法的参数名"

当args和args-name一起使用的时候,方法表达式的参数类型可以不写

如果args单独使用的时候 方法表达式的参数类型要写

exection(* *.addCourse(参数名)and(&&) args(通知方法里面的参数名))

exection(* *.addCourse(String)and(&&) args(通知方法里面的参数名))

拦截所有pubilc 修饰的方法:exection(public *.addCourse(..) )

拦截方法的参数类型取决于通知方法里面的参数类型

exection(* *.addCourse(参数名)and(&&) args(通知方法里面的参数名) and args-name = “通知方法里面的参数名,参数名”)


目录
相关文章
|
1月前
|
监控 Java 开发者
Spring AOP动态代理
Spring AOP动态代理
43 1
|
1月前
|
Java Spring 容器
Spring的AOP失效场景详解
Spring的AOP失效场景详解
100 0
|
2月前
|
XML Java 编译器
Spring AOP初步理解及使用
Spring AOP初步理解及使用
49 0
|
2月前
|
Java Spring
[Spring]aop的配置与使用
[Spring]aop的配置与使用
40 0
[Spring]aop的配置与使用
|
28天前
|
设计模式 Java Maven
Spring Aop 底层责任链思路实现-springaopdi-ceng-ze-ren-lian-si-lu-shi-xian
Spring Aop 底层责任链思路实现-springaopdi-ceng-ze-ren-lian-si-lu-shi-xian
34 1
|
2月前
|
XML Java 数据格式
5个点轻松搞定Spring AOP底层实现原理
AOP 也是 Spring 中一个较为重要的内容,相对于传统的 OOP 模式,AOP 有很多让人难以理解的地方,本篇文章将向大家介绍 AOP 的实现方法及其底层实现,内容包括:
46 1
|
21天前
|
XML Java Maven
Spring之Aop的注解使用
Spring之Aop的注解使用
|
27天前
|
Java Spring
Spring 如何实现 AOP
Spring 如何实现 AOP
17 0
|
1月前
|
Java 编译器 程序员
Spring AOP 和 AspectJ 的比较
Spring AOP 和 AspectJ 的比较
37 0
|
1月前
|
Java Spring
【spring(三)】AOP总结
【spring(三)】AOP总结