Spring AOP详解

Spring AOP四种实现方式Demo详解  
AOP相关概念  :  在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。
一般而言,我们管切入到指定类指定方法的代码片段称为 切面 ,而切入到哪些类、哪些方法则叫 切入点 。有了AOP,我们就可以把几个类共有的代码,抽取到一个切片中,等到需要时再切入对象中去,从而改变其原有的行为。
AOP面向切面编程 :通过预编译方式和动态代理实现程序功能的统一维护 
在框架中利用AOP对业务逻辑的各个部分进行隔离,从而使业务逻辑耦合度降低,提高开发效率.
IOC控制反转 :在spring之前对象创建都是要手动处理,现在把对象的创建交给spring进行配置(两种配置方式: .xml 创建对象 通过工厂类 创建对象) 
DI依赖注入 :在IOC基础上完成想类里面属性设置的过程 
重点内容  
Spring容器中提供了AOP技术,利用它实现拦截监控 
Spring是一个轻量级的控制反转和面向切面的容器框架 

AOP用 jdk和cglib 两种代理方式实现拦截
  aop 底层原理 :
1> AOP横向抽取机制: 动态代理方式
(1) jdk动态代理, 针对有接口的情况, 创建接口实现类代理对象
(2) cglib动态代理, 针对没有接口的情况,子类调用父类的方法实现增强/通知

切面(Aspect):一个关注点的模块化,这个关注点实现可能另外横切多个对象。事务管理是J2EE应用中一个很好的横切关注点例子。方面用 spring 的 Advisor或拦截器实现。
 
连接点(Joinpoint): 程序执行过程中明确的点,如方法的调用或特定的异常被抛出。
 
增强(advice,另译为通知 : 在特定的连接点,AOP框架执行的动作。各种类型的通知包括“around”、“before”和“throws”通知。通知类型将在下面讨论。许多AOP框架包括Spring都是以拦截器做通知模型,维护一个“围绕”连接点的拦截器链。Spring中定义了四个advice: BeforeAdvice, AfterAdvice, ThrowAdvice和DynamicIntroductionAdvice
 
切入点(Pointcut): 指定一个通知将被引发的一系列连接点的集合。AOP框架必须允许开发者指定切入点:例如,使用正则表达式。 Spring定义了Pointcut接口,用来组合MethodMatcher和ClassFilter,可以通过名字很清楚的理解, MethodMatcher是用来检查目标类的方法是否可以被应用此通知,而ClassFilter是用来检查Pointcut是否应该应用到目标类上
 
引入(Introduction): 添加方法或字段到被通知的类。 Spring允许引入新的接口到任何被通知的对象。例如,你可以使用一个引入使任何对象实现 IsModified接口,来简化缓存。Spring中要使用Introduction, 可有通过DelegatingIntroductionInterceptor来实现通知,通过DefaultIntroductionAdvisor来配置Advice和代理类要实现的接口
 
目标对象(Target Object): 包含连接点的对象。也被称作被通知或被代理对象。POJO
 
AOP代理(AOP Proxy): AOP框架创建的对象,包含通知。 在Spring中,AOP代理可以是JDK动态代理或者CGLIB代理。
 
织入(Weaving): 组装方面来创建一个被通知对象。这可以在编译时完成(例如使用AspectJ编译器),也可以在运行时完成。Spring和其他纯 Java  AOP框架一样,在运行时完成织入。
Spring AOP都有哪些通知( 增强 )?
 前置通知[Before advice]:在连接点前面执行,前置通知不会影响连接点的执行,除非此处抛出异常。
 
 后置通知[After returning advice]:在连接点正常执行完成后执行,如果连接点抛出异常,则不会执行。
  后置通知可以访问返回值(但不能进行修改),被调用方法,方法参数以及目标对象。
 异常通知[After throwing advice]:在连接点抛出异常后执行。
 
 最终通知[After (finally) advice]:在连接点执行完成后执行,不管是正常执行完成,还是抛出异常,都会执行返回通知中的内容。

 环绕通知[Around advice]:环绕通知围绕在连接点前后,比如一个方法调用的前后。这是最强大的通知类型,能在方法调用前后自定义一些操作。 环绕通知还需要负责决定是继续处理连接点(调用ProceedingJoinPoint的proceed方法)还是中断执行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值