Spring面向切面编程(AOP)

 

什么是AOP

面向切面编程,将多业务流程涉及的通用功能,如权限、日志、事务管理等抽取出来并单独封装,形成独立的切面;在适当的时机,将切面横向切入到业务流程指定的位置中。是对OOP面向对象编程的一种补充。

优点:可以降低各步骤之间的耦合性,且扩展功能时不需要对公共的逻辑处理。

使用场景

Authentication 权限

Authentication 权限、logging, tracing, profiling and monitoring 记录跟踪优化 校准、Transactions 事务、Resource pooling 资源池、Synchronization 同步、Caching 缓存、Context passing 内容传递、Error handling 错误处理Lazy loading懒加载、Debugging调试、Performance optimization 性能优化、Persistence 持久化。

 

把大象老虎塞进冰箱

把大象装进冰箱分三步:

(1)、打开冰箱

(2)、把大象装进冰箱    把老虎装进冰箱

(3)、关上冰箱

 

解决的几种思路方法:

1、可以写一个工具类,把重复的过程写工具类里

2、继承一个类,执行相同的方法

3、动态代理解决

4、AOP

AOP代理的实现技术

AspectJ

 用一种AspectJ支持的特定语言编写切面,通过一个命令来编译,生成一个新的代理类。是在编译时增强,相对于下面说的运行时增强,编译时增强的性能更好。

Spring AOP

在运行期间对业务方法进行增强,不会生成新类。对于动态代理技术,Spring AOP提供了对JDK动态代理的支持以及CGLib的支持。

JDK动态代理只能为接口创建动态代理实例,利用JDK的反射机制,在运行时动态的生成代理对象并加载到JVM中,即编译完成后不存在class文件。

CGLib动态代理,不需要目标对象实现接口,可以防止代理类的侵入。把被代理对象类的class文件加载进来,修改其字节码生成子类。

常见的代理模式的对比

动态代理:在目标对象实现接口的前提下,利用JDK的反射机制,在运行时动态的生成代理对象并加载到JVM中,即编译完成后不存在class文件。

CGLIB代理:使用第三方类库动态的生成代理对象,不需要目标对象实现接口,可以防止代理类的侵入。

静态代理:代理对象和目标对象同实现一个接口,在代理对象中调用了目标对象的方法。使客户端对目标对象的调用,只能通过代理对象来实现。冗余,扩展时不易维护。

Spring AOP的关键名词

关系图

切面(Aspect)

AOP模块的核心,即切入业务流程的独立模块,如日志、事务、权限管理模块。在Spring AOP中,切面通过带有@Aspect注解的类实现。

通知(Advice)以及分类

即切面的具体实现方法,

前置通知(Before advice):执行方法之前的通知,不能阻止连接点的执行(除非该通知抛出异常)

最终通知(After advice):方法结束时的通知,不管是正常返回还是异常通知)、

后置通知(AfterReturning advice):方法正常结束时的通知

异常通知(AfterThrowing advice):方法抛出异常退出时的通知

环绕通知(Around advice):包围一个连接点的通知,可在方法调用前、正常返回、异常等时的通知。是最常用的一种通知类型。大部分基于拦截的AOP框架,例如Nanning和JBoss4,都只提供环绕通知。

可使用配置文件、注解指定。

连接点(Joinpoint)

业务流程在运行过程中需要插入切面的具体位置,即实际执行AOP的位置。

切入点(Pointcut)

即用于定义 Advice应该和哪些Joinpoint关联,如<aop:pointcut>

目标对象(Target Object)

被切面所通知的对象,即业务逻辑处理对象。这个对象永远是一个被代理(proxied)对象。

代理对象(Proxy Object)

目标对象被切入切面之后形成的对象,从客户端看目标对象和代理对象是一样的效果。

织入(Weaving)

将切面Aspect的对应的Advice,根据PointCut的配置,应用到应用程序对应的JoinPoint,从而创建一个新的代理对象的过程。这个过程可以发生在编译期、类装载期及运行期。

 

 

配置文件示例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值