spring aop整理

AOP常见术语:
● Aspect(切面)
表示切面。切入业务流程的一个独立模块。Aspect 声明类似于 Java 中的类声明,在 Aspect 中会包含着一些 Pointcut 以及相应的 Advice。
● Joint point(连接点)
表示在程序中明确定义的点,典型的包括方法调用,对类成员的访问以及异常处理程序块的执行等等,它自身还可以嵌套其它 joint point。java bean类中的所有方法都可以叫做连接点。
● Pointcut(切点):
表示一组 joint point,这些 joint point 或是通过逻辑关系组合起来,或是通过通配、正则表达式等方式集中起来,它定义了相应的 Advice 将要发生的地方。符合条件的连接点集合叫做切点。
● Advice(增强):
Advice 定义了在 Pointcut 里面定义的程序点具体要做的操作,它通过 before、after 和 around 来区别是在每个 joint point 之前、之后还是代替执行的代码。
● Target(目标对象):
织入 Advice 的目标对象.。被一个或者多个切面所通知的对象。
● Proxy(代理)
表示代理对象。将通知应用到目标对象之后被动态创建的对象。可以简单地理解为,代理对象为目标对象的业务逻辑功能加上被切入的切面所形成的对象。
● Weaving(织入)
表示切入,也称为织入。将切面应用到目标对象从而创建一个新的代理对象的过程。这个过程可以发生在编译期、类装载期及运行期。

Advice 的类型:
● before advice, 在 join point 前被执行的 advice. 虽然 before advice 是在 join point 前被执行, 但是它并不能够阻止 join point 的执行, 除非发生了异常(即我们在 before advice 代码中, 不能人为地决定是否继续执行 join point 中的代码)
● after return advice, 在一个 join point 正常返回后执行的 advice
● after throwing advice, 当一个 join point 抛出异常后执行的 advice
● after(final) advice, 无论一个 join point 是正常退出还是发生了异常, 都会被执行的 advice.
● around advice, 在 join point 前和 joint point 退出后都执行的 advice. 这个是最常用的 advice.
● introduction,introduction可以为原有的对象增加新的属性和方法。

SpringAop与AspectJ的联系与区别
SpringAop可以基于AspectJ实现面向切面编程。

AspectJ
属于静态织入:在编译时期就织入。AspectJ是一个面向切面的框架,它扩展了Java语言。AspectJ定义了AOP语法,所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件。

SpringAop
属于动态织入:在运行时期织入。
Spring提供了四种类型的Aop支持

  • (1)基于经典的SpringAOP
  • (2) 纯POJO切面
  • (3)@ASpectJ注解驱动的切面
  • (4)注入式AspectJ切面(其实与Spring并无多大的关系,这个就是使用AspectJ这个框架实现Aop编程)

基于经典的SpringAop

(1)使用ProxyFactoryBean创建代理对象:
每个Target(目标对象)都需要创建一个Proxy(代理)
增强(通知)的类型有:
前置通知:org.springframework.aop.MethodBeforeAdvice
后置通知:org.springframework.aop.AfterReturningAdvice
环绕通知:org.aopalliance.intercept.MethodInterceptor
异常通知:org.springframework.aop.ThrowsAdvice

(2)使用BeanNameAutoProxyCreator创建代理对象
可以使用通配符统一创建代理对象

(3)使用DefaultAdvisorAutoProxyCreator创建代理对象
根据切面信息自动生成代理对象

纯POJO切面
需要使用XML进行配置,aop:config配置,借助于Spring Aop的命名空间可以将纯POJO转换为切面,实际上这些POJO只是提供了满足切点的条件时所需要调用的方法,但是,这种技术需要XML进行配置,不能支持注解。

参考博客:
细说Spring——AOP详解(AOP概览)
spring AOP advice 类型 和 通用的切点的配置方式
SPRING AOP与ASPECTJ
SpringAop与AspectJ的联系与区别
Spring AOP之Introduction
Java JDK代理、CGLIB、AspectJ代理分析比较

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值