SpringAOP的Aspectj方式*
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) 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方式*相关推荐
- SpringAop与AspectJ的联系与区别____比较分析 Spring AOP 和 AspectJ 之间的差别
SpringAop与AspectJ的联系与区别 区别 AspectJ AspectJ是一个面向切面的框架,它扩展了Java语言.AspectJ定义了AOP语法,所以它有一个专门的编译器用来生成遵守Ja ...
- springAop和AspectJ的关系
Aop是一种概念 springAop.AspectJ都是Aop的实现,SpringAop有自己的语法,但是语法复杂,所以SpringAop借助了AspectJ的注解,但是底层实现还是自己的 sprin ...
- SpringAOP的SchemaBase方式
文章目录 1.SpringAOP的专业概念: 2.SpringAOP的SchemaBase方式基本流程 SchemaBase方式环绕通知方式实现AOP SchemaBase方式的异常通知 Spring ...
- SpringAOP和AspectJ
SpringAOP和AspectJ的关系 问题:之前对 SpringAOP和AspectJ的关系感到疑惑,因为曾经在书上看过SpringAOP集成了AspectJ,那么SpringAOP是直接使用了A ...
- AspectJ方式注解需要相应的包
<!--使用AspectJ方式注解需要相应的包--> <dependency> <groupId>org.aspectj</groupId> ...
- Spring-AOP 使用@AspectJ
概述 准备工作 实例 通过编码的方式使用AspectJ切面 通过配置的方式使用AspectJ切面 自动生成代理的方式 基于Schema的aop命名空间配置的方式 概述 我们之前一个系列的文章,分别使用 ...
- 关于SpringAOP的XML方式的配置
AOP(XML)[理解][应用][重点] 1.AOP基础实例 A.导入jar包 核心包(4个) 日志(2个) AOP(4个) Spring进行AOP开发(1个) ...
- Spring-aop 基于Aspectj 表达式配置AOP
基于Aspectj 表达式配置AOP(推荐使用) 基于配置文件 1.添加切面对象(aspect对象) 2.把切面对象交给spring 3.配置文件 <?xml version="1.0 ...
- springAOP编程-aspectJ开启注解自动代理
Proxy-target-class默认值是false,代表的是如果目标是有接口的使用proxy代理,如果没有接口使用cglib. 如果将proxy-target-class=true,不管目标是否有 ...
最新文章
- C++拾趣——C++11的语法糖auto
- Spring mvc3的ajax
- 【Android开发—智能家居系列】(四):UDP通信发送指令
- Adaptive Execution让Spark SQL更高效更好用
- javascript 符号_理解JavaScript中“ =”符号的直观指南
- python中扑克牌类设计_python中的图像界面设计(二)
- UnityShader21:程序纹理
- A*算法收敛最优点的简单证明
- 【AD】Altium Designer PCB文件的绘制(上篇:PCB基础和布局)
- 电工与电子技术基础【2】
- 全志a20 开发板 linux,全志A83T开发板SDK资料,A20/A31S升级,QT5,Android5.1,Lubuntu
- 压测学习总结——高并发性能指标:QPS、TPS、RT、吞吐量详解
- 2022ChinaVis会议笔记
- 服务器系统修复工具,Windows Repair(系统修复工具) v4.9.0
- crosscheck archivelog all;crosscheck backup of区别
- Tomcat部署静态页面
- Zigbee疑难问题定位以及思路方法分享 (一)
- Starrocks集群部署
- 美国智能网联最新政策动态(2021年9-11月)
- 导入训练好的模型参数代码报错Failed to find any matching files for ram://20787ba9-e8c3-4c71-a3b9-dc406d492e95/varia
热门文章
- php字符串类型详解,php数字类型之字符串类型详解
- 数据结构与算法--二叉查找树转顺序排列双向链表
- python实现最小二乘法的线性回归_最小二乘法求线性回归的python实现
- Educational Codeforces Round 75 (Rated for Div. 2) E2. Voting (Hard Version) 贪心
- Codeforces Round #633 B. Edge Weight Assignment 结论题 + dp
- nowcoder Forsaken的数列 fhq-treap
- P3391 【模板】文艺平衡树 fhq-treap 模板
- cf1208E. Let Them Slide
- P5049 [NOIP2018 提高组] 旅行
- 牛客网【每日一题】4月2日 月月查华华的手机