SpringAOP的Aspectj介绍

问题:

目前我们已经能够使用SpringAOP的SchemaBased方式来实现功能扩展。在使用SchemaBased方式实现功能扩展时,发现一个扩展代码就需要声明对应的实现了指定的接口的类,这样造成代码的结构体系过于繁杂。一个通知一个类。

解决:

在一个类中声明所有的通知方法。这样又会造成Spring容器无法区分该类中的方法那些是前置,那些是后置,那些是环绕,那些是异常了,怎么办?在配置文件中的切面配置中,指明哪些方法是前置,哪些是后置即可。

实现:

SpringAOP的AspectJ方式
① 创建一个web项目并导入AOP的相关jar包
② 在src下声明mvc的包结构
③在src下创建并配置applicationcontext.xml
a. 切点的bean
b.扩展类的bean
c. 配置切面 声明切点 声明前置通知 声明后置通知 声明环绕通知 声明异常通知
④ 获取Spring容器中的扩展对象完成功能操作。

代码实现
通知类:

applicationcontext.xml

Acspectj和SchemaBased的异同

  1. 相同点:

在不修改源码的情况下都能实现功能的扩展。

  1. 不同点:

(1) SchemaBased方式基于接口来区别前置和后置和环绕和异常通知的,而AspectJ方式是在配置文件中使用标签来区分。

(2) AspectJ方式在配置中的配置方式发现其切点的声明以及对应的通知组装中,切点只在Aop:aspect标签下有效。而SchemaBased方式声明的切点在全局有效.SchemaBased的切点的通用性比AspectJ方式要好。

(3) AspectJ方式扩展涉及参数的流程:

① 切点方法中声明形参完成数据处理

② 修改通知方法声明形参接收对应的实参

③ 修改配置文件中的切点声明,切点中的方法上声明对应的参数类型。同时还要声明参数的形参名

④ 在通知的配置上声明参数名


(4) 在SchemaBased方式涉及形参的流程:

① 在切点方法上声明形参完成功能处理

② 在配置文件中修改切点的路径为带有参数的切点

③ 直接在通知方法中的形参中的Object[]中获取参数使 用即可

总结:不涉及到参数问题使用AspectJ方式完成功能扩展比较方便,但是涉及到参数后使用SchemaBased方式比较方便。

SpringAOP的切点的声明格式

① 切点是某包某类的无参数的方法:
示例:
execution(* com.bjsxt.service.impl.Student.test())
② 切点是某包某类带有参数的方法
示例:
execution(* com.bjsxt.service.impl.Student.test(String,int))
③ 切点是某包某类的某个同名的所有方法
示例:… 表示任意个数任意类型的参数
execution(* com.bjsxt.service.impl.Student.test(…))
④ 切点是某包下的某类的所有方法
示例:表示任意的类名,方法名,包名
execution(
com.bjsxt.service.impl.Student.(…))
⑤ 切点是某包下的所有类的所有方法
示例:
表示任意的类名,方法名,包名
execution(* com.bjsxt.service.impl..(…))

SpringAOP的Aspectj方式*相关推荐

  1. SpringAop与AspectJ的联系与区别____比较分析 Spring AOP 和 AspectJ 之间的差别

    SpringAop与AspectJ的联系与区别 区别 AspectJ AspectJ是一个面向切面的框架,它扩展了Java语言.AspectJ定义了AOP语法,所以它有一个专门的编译器用来生成遵守Ja ...

  2. springAop和AspectJ的关系

    Aop是一种概念 springAop.AspectJ都是Aop的实现,SpringAop有自己的语法,但是语法复杂,所以SpringAop借助了AspectJ的注解,但是底层实现还是自己的 sprin ...

  3. SpringAOP的SchemaBase方式

    文章目录 1.SpringAOP的专业概念: 2.SpringAOP的SchemaBase方式基本流程 SchemaBase方式环绕通知方式实现AOP SchemaBase方式的异常通知 Spring ...

  4. SpringAOP和AspectJ

    SpringAOP和AspectJ的关系 问题:之前对 SpringAOP和AspectJ的关系感到疑惑,因为曾经在书上看过SpringAOP集成了AspectJ,那么SpringAOP是直接使用了A ...

  5. AspectJ方式注解需要相应的包

    <!--使用AspectJ方式注解需要相应的包--> <dependency>     <groupId>org.aspectj</groupId>   ...

  6. Spring-AOP 使用@AspectJ

    概述 准备工作 实例 通过编码的方式使用AspectJ切面 通过配置的方式使用AspectJ切面 自动生成代理的方式 基于Schema的aop命名空间配置的方式 概述 我们之前一个系列的文章,分别使用 ...

  7. 关于SpringAOP的XML方式的配置

    AOP(XML)[理解][应用][重点] 1.AOP基础实例 A.导入jar包 核心包(4个)         日志(2个)             AOP(4个) Spring进行AOP开发(1个) ...

  8. Spring-aop 基于Aspectj 表达式配置AOP

    基于Aspectj 表达式配置AOP(推荐使用) 基于配置文件 1.添加切面对象(aspect对象) 2.把切面对象交给spring 3.配置文件 <?xml version="1.0 ...

  9. springAOP编程-aspectJ开启注解自动代理

    Proxy-target-class默认值是false,代表的是如果目标是有接口的使用proxy代理,如果没有接口使用cglib. 如果将proxy-target-class=true,不管目标是否有 ...

最新文章

  1. C++拾趣——C++11的语法糖auto
  2. Spring mvc3的ajax
  3. 【Android开发—智能家居系列】(四):UDP通信发送指令
  4. Adaptive Execution让Spark SQL更高效更好用
  5. javascript 符号_理解JavaScript中“ =”符号的直观指南
  6. python中扑克牌类设计_python中的图像界面设计(二)
  7. UnityShader21:程序纹理
  8. A*算法收敛最优点的简单证明
  9. 【AD】Altium Designer PCB文件的绘制(上篇:PCB基础和布局)
  10. 电工与电子技术基础【2】
  11. 全志a20 开发板 linux,全志A83T开发板SDK资料,A20/A31S升级,QT5,Android5.1,Lubuntu
  12. 压测学习总结——高并发性能指标:QPS、TPS、RT、吞吐量详解
  13. 2022ChinaVis会议笔记
  14. 服务器系统修复工具,Windows Repair(系统修复工具) v4.9.0
  15. crosscheck archivelog all;crosscheck backup of区别
  16. Tomcat部署静态页面
  17. Zigbee疑难问题定位以及思路方法分享 (一)
  18. Starrocks集群部署
  19. 美国智能网联最新政策动态(2021年9-11月)
  20. 导入训练好的模型参数代码报错Failed to find any matching files for ram://20787ba9-e8c3-4c71-a3b9-dc406d492e95/varia

热门文章

  1. php字符串类型详解,php数字类型之字符串类型详解
  2. 数据结构与算法--二叉查找树转顺序排列双向链表
  3. python实现最小二乘法的线性回归_最小二乘法求线性回归的python实现
  4. Educational Codeforces Round 75 (Rated for Div. 2) E2. Voting (Hard Version) 贪心
  5. Codeforces Round #633 B. Edge Weight Assignment 结论题 + dp
  6. nowcoder Forsaken的数列 fhq-treap
  7. P3391 【模板】文艺平衡树 fhq-treap 模板
  8. cf1208E. Let Them Slide
  9. P5049 [NOIP2018 提高组] 旅行
  10. 牛客网【每日一题】4月2日 月月查华华的手机