导航菜单
路很长,又很短
博主信息
昵   称:Cocodroid ->关于我
Q     Q:2531075716
博文数:305
阅读量:707490
访问量:66811
至今:
×
云标签 标签球>>
云标签 - Su的技术博客
Tags : Spring,AOP,注解发表时间: 2019-03-04 22:16:31
在Java EE应用中,常常通过AOP来处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等。

1.AOP的基本概念

AOP从程序运行角度考虑程序的流程,提取业务处理过程的切面。AOP面向的是程序运行中各个步骤,希望以更好的方式来组合业务处理的步骤。 
AOP框架并不与特定的代码耦合,AOP框架能处理程序中特定切入点(Pointcut),而不与具体某个具体类耦合。

AOP框架具有如下两个特征: 
☞ 各步骤之间良好隔离性 
☞ 源代码无关性

下面是关于面向切面编程的一些术语: 
☞ 切面(AspectJ):业务流程运行的某个特定步骤,也就是应用运行过程的关注点,关注点可能横切多个对象,所以常常也称为横切关注点 
☞ 连接点(Joinpoint):程序执行过程中明确的点,如方法的调用,或者异常的抛出。Spring AOP中,连接点总是方法的调用 
☞ 增强处理(Advice):AOP框架在特定的切入点执行的增强处理。处理有“around”、“before”和“after”等类型 
☞ 切入点(Pointcut):可以插入增强处理的连接点。简而言之,当某个连接点满足指定要求时,该连接点将被添加增强处理,该连接点也就变成了切入点。Spring默认使用AspectJ切入点语法 
☞ 引入:将方法或字段添加到被处理的类中。Spring允许引入新的接口到任何被处理的对象。例如,你可以使用一个引入,使任何对象实现IsModified接口,以此来简化缓存 
☞ 目标对象:被AOP框架进行增强处理的对象,也被称为被增强的对象 
☞ AOP代理:AOP框架创建的对象,简单的说,代理就是对目标对象的加强。Spring中的AOP代理可以是JDK动态代理,也可以是CGLIB代理 
☞ 织入(Weaving):将增强处理添加到目标对象中,并创建一个被增强的对象(AOP代理)的过程就是织入。织入有两种实现方式:编译时增强(例如AspectJ)和运行时增强(例如CGLIB)。Spring和其他纯Java AOP框架一样,在运行时完成织入。

由前面的介绍知道:AOP代理其实是由AOP框架动态生成的一个对象,该对象可作为目标对象使用。AOP代理包含了目标对象的全部方法,但AOP代理中的方法与目标对象的方法存在差异:AOP方法在特定切入点添加了增强处理,并回调了目标对象的方法

2.Spring的AOP支持

Spring中AOP代理由Spring的IOC容器负责生成、管理,其依赖关系也有IOC容器负责管理。因此,AOP代理可以直接使用容器中的其他Bean实例作为目标,这种关系可由IOC容器的依赖注入提供。Spring默认使用Java动态代理来创建AOP代理,这样就可以为任何接口实例创建代理了。 
Spring也可以使用CGLIB代理,在需要代理类而不是代理接口的时候,Spring自动会切换为使用CGLIB代理。 
Spring目前仅支持将方法调用作为连接点(Joinpoint),如果需要把对Field的访问和更新也作为增强处理的连接点,则可以考虑使用AspectJ。 
纵观AOP编程,其中需要程序员参与的只有三个部分: 
☞ 定义普通业务组件 
☞ 定义切入点,一个切入点可能横切多个业务组件 
☞ 定义增强处理,增强处理就是在AOP框架为普通业务组件织入的处理动作

...阅读原文