<!--
AOP:面向切面编程
通知(Advice):通知就是切面要完成的工作,通知定义了切面是什么以及何时使用。除了描述切面要完成的工作,通知还解决了何时执行这个工作的问题。
Spring切面可以应用5种类型的通知
1.Before:在方法被调用前调用通知
2.After:在方法完成之后调用通知,无论方法执行是否成功。
3.After-returning:在方法成功执行之后调用通知
4.After-throwing:在方法抛出异常之后调用通知
5.Around:通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为。
连接点(Joinpoint):时机被称为连接点。连接点实在应用执行过程中能够插入切面的一个点。这个点可以是调用方法时、抛出异常时、甚至修改一个字段时。
切面代码可以利用这些点插入到应用的正常流程之中,并添加新的行为。
切点(Poincut):一个切面并不需要通知应用的所有连接点。切点有助于缩小切面所通知连接点的范围。切点的定义会匹配通知所要织入的一个或多个连接点。
切面(Aspect):切面是通知和切点的结合。通知和切点共同定义了关于切面的全部内容。即它是什么,在何时和何处完成其功能。
引入(Introduction):引入允许我们向现有的类添加新方法或属性。
织入(Weaving):织入是将切面应用到目标对象来创建新的代理对象的过程。切面在指定的连接点被织入到目标对象中。在目标对象的生命周日里有多个点可以被织入。
Spring提供了4中各具特色的AOP支持:
1.基于代理的经典AOP
2.@AspectJ注解驱动的切面
3.纯POJO切面
4.注入式AspectJ切面
Spring基于动态代理,所以Spring只支持方法连接点。
execution()指示器选择Instrument的play()方法:
execution( * com.bean.Instrument.play(..)) && within(com.nec.dio.*)
| | | | | | | |
方法执行时触发 返回值 方法所属包 类 方法 任意参数 与操作符 仅匹配该包下
bean()指示器:通过id选择bean
Spring的AOP配置元素
----------------------------------------------------------------------
AOP配置元素 |描述
----------------------------------------------------------------------
<aop:advisor> |定义AOP通知器
----------------------------------------------------------------------
<aop:after> |定义aop后置通知(不管被通知的方法是否执行成功)
----------------------------------------------------------------------
<aop:after-returning> |定义AOP after-returning通知
----------------------------------------------------------------------
<aop:after-throwing> |定义after-throwing通知
----------------------------------------------------------------------
<aop:around> |定义AOP环绕通知
----------------------------------------------------------------------
<aop:aspect> |定义切面
----------------------------------------------------------------------
<aop:aspectj-autoproxy> |启用@AspectJ注解驱动的切面
----------------------------------------------------------------------
<aop:before> |定义AOP前置通知
----------------------------------------------------------------------
<aop:config> |顶层的AOP配置元素,大多数的<aop:*>元素必须包含在<sop:config>元素内
----------------------------------------------------------------------
<aop:declare-parents> |违背通知的对象引入额外的接口,并透明的实现
----------------------------------------------------------------------
<aop:pointcut> |定义切点
----------------------------------------------------------------------
-->
<bean id="audience" class="com.bean。Audience"/>
<!--使用Spring AOP配置元素声明一个audience切面 -->
<aop:config>
<aop:aspect ref="audience">
<aop:before method="takeSeats" pointcut="execution(* com.bean.perform(..))"/>
<aop:before method="turnOffCellPhones" pointcut="execution(* com.bean.perform(..))"/>
<aop:after-returning method="applaud" pointcut="execution(* com.bean.perform(..))"/>
<aop:after-throwing method="demandRefund" pointcut="execution(* com.bean.perform(..))"/>
</aop:aspect>
</aop:config>
<!-- 上面定义中,似乎切点部分重复,我们可以单独定义切点再引用 -->
<aop:config>
<aop:aspect ref="audience">
<aop:pointcut expression="execution(* com.bean.perform(..))" id="performance"/>
<aop:before method="takeSeats" pointcut-ref="performance"/>
<aop:before method="turnOffCellPhones" pointcut-ref="performance"/>
<aop:after-returning method="applaud" pointcut-ref="performance"/>
<aop:after-throwing method="demandRefund" pointcut-ref="performance"/>
</aop:aspect>
</aop:config>
相关推荐
3、对spring aop认识模糊的,不清楚如何实现Java 自定义注解的 4、想看spring aop 注解实现记录系统日志并入库等 二、能学到什么 1、收获可用源码 2、能够清楚的知道如何用spring aop实现自定义注解以及注解的逻辑...
spring aop jar 包
描述一下Spring AOP? 在Spring AOP中关注点(concern)和横切关注点(cross-cutting concern)有什么不同? AOP有哪些可用的实现? Spring中有哪些不同的通知类型(advice types)? Spring AOP 代理是什么? 引介...
基于注解实现SpringAop基于注解实现SpringAop基于注解实现SpringAop
死磕Spring之AOP篇 - Spring AOP两种代理对象的拦截处理(csdn)————程序
spring aop切面拦截指定类和方法实现流程日志跟踪 一般情况下,在不侵入业务代码的情况下,需要做流程日志跟踪是比较合理的 采用springaop切面思想
AOP的意思就是面向切面编程。本文主要是通过梳理JDK中自带的反射机制,实现 AOP动态代理模式,这也是Spring AOP 的实现原理
springaop依赖的jar包,spring版本2.5.6,如果需要,可以下载使用,欢迎各位评论指出不足
springAOP配置实现动态代理,有利于熟悉动态代理原理,深入了解spring。
Spring源码最难问题:当Spring AOP遇上循环依赖.docx
spring aop的demo spring aop的demo
Spring AOP 入门 作者:廖雪峰
spring aop spring aop spring aop spring aop spring aop spring aop spring aop spring aop spring aop
Spring AOP 日志管理 实例LoggingThrowsAdvice.java
Spring AOP 几个不同使用方法的完整例子,使用Junit4c测试, 在我的博客上有不同配置组合的说明,可以参考
Spring AOP的实现机制中文版,动态代理及原理,自定义类加载器
Spring AOP简单demo 入门级的 advice
springAOP详解
spring aop 经典例子(原创),无论新手还是老手,可以快速对Spring AOP有个总体的认识。基于JDK1.6,Spring2.0.5,Eclipse IDE。
springaop多数据库读写分离