Spring AOP原理
来源:互联网 发布:免费网络电视 编辑:程序博客网 时间:2024/06/03 21:42
Spring AOP 原理
aop:面向切面(方面)编程,
扩展功能不修改源代码实现
AOP 机制
采用横向抽取机制,取代原来的纵向抽取机制
纵向抽取机制
* 横向抽取机制*
aop底层使用动态代理实现
(1)第一种情况,有接口情况,使用动态代理创建接口实现类代理对象 (jdk动态代理)
(2)第二种情况,没有接口情况,使用动态代理创建类的子类代理对象 (cglib 动态代理)
AOP 常见术语
- 连接点 : 类中的哪些方法可被增强,这些方法称之为连接点
- 切入点: 类中很多方法可以被增强,实际增强的方法称之为切入点
- 通知: 增强的逻辑,比如扩展的日志功能,事务等功能
前置通知 before:方法执行之前执行
后置通知 after:方法执行之后执行,不论方法是否执行成功
环绕通知 around :方法执行之前和之后执行,相当于将切点的执行放入到这个环绕通知中,由其决定是否执行以及执行前后的操作
另外常见一个新的类进行执行
// 执行之前的操作
jointpoint.proceed();
// 执行之后的操作
异常通知 after-throwing:方法抛出异常之后执行
最终通知 after-returning:方法执行成功之后调用通知 - 切面:把增强(通知)应用到具体的方法上面的过程称为切面
- 织入:把切面应用到目标对象来创建新的代理对象的过程
- 引入: 允许我们 向现有的类添加新的属性或者方法
AspectJ 进行AOP的配置
基于aspectj的xml 配置
1 切入点:实际增强的方法
2 常用的表达式
execution(<访问修饰符>?<返回类型><方法名>(<参数>)<异常>)
(1)切入点为 book类中的 add 方法—–execution(* cn.itcast.aop.Book.add(..))
(2)切入点为book类中的所有方法—–execution(* cn.itcast.aop.Book.*(..))
(3)切入点为所有的方法——-execution(* .(..))
(4)切入点为匹配所有save开头的方法 execution(* save*(..))
<!-- 1 配置对象 --><bean id="book" class="cn.itcast.aop.Book"></bean><bean id="myBook" class="cn.itcast.aop.MyBook"></bean><!-- 2 配置aop操作 --><aop:config> <!-- 2.1 配置切入点 --> <aop:pointcut expression="execution(* cn.itcast.aop.Book.*(..))" id="pointcut1"/> <!-- 2.2 配置切面 把增强用到方法上面,ref为实际增强方法所在的类 --> <aop:aspect ref="myBook"> <!-- 配置增强类型 method: 增强类里面使用哪个方法作为前置 --> <aop:before method="before1" pointcut-ref="pointcut1"/> <aop:after-returning method="after1" pointcut-ref="pointcut1"/> <aop:around method="around1" pointcut-ref="pointcut1"/> </aop:aspect></aop:config>
基于AspectJ的注解配置
说明: 本文大部分内容都是跟随者传播智课的教学视频学习而来,可以看做是翻译文章,只是自己吸收之后又书写一遍,加深自己的知识理解。
阅读全文
0 0
- spring aop 原理(转)
- spring aop 原理
- spring AOP原理
- spring的aop原理
- spring aop原理(转)
- spring AOP实现原理
- Spring的AOP原理
- spring AOP原理
- spring AOP原理
- spring ioc 、 aop原理
- 浅析Spring AOP原理
- Spring AOP原理
- Spring aop(原理)
- Spring AOP 实现原理
- Spring AOP 实现原理
- Spring AOP 原理
- Spring Aop原理
- Spring Aop 实现原理
- go anzhan
- 顺序栈使用——表达式求值
- 原型模式
- 深入理解PHP原理之变量分离/引用(Variables Separation)
- linux命令_系统管理_nohup
- Spring AOP原理
- JDBC_day01
- HashMap 散列初体验
- java访问liunx服务器
- JQuery EasyUI window 用法
- TP只保留年月日,不显示具体时间的写法
- Java XML中配置dubbo相关标签不能解析的问题
- C++函数模板的隐式实例化、显式实例化与显式具体化
- JTA深度历险-原理与实现