Spring 之AOP

什么是代理

指为一个目标对象提供一个代理对象, 并由代理对象控制对目标对象的引用. 

使用代理对象, 是为了在不修改目标对象的基础上, 增强目标对象的业务逻辑

为什么要使用代理:

   1.可以隐藏目标类的具体实现

·  2 。在不修改目标类代码的情况下能够对其功能进行增强

代理分为静态代理和动态代理

静态代理

若代理类在程序运行前就已经存在,那么这种代理方式被成为 静态代理 ,

这种情况下的代理类通常都是我们在Java代码中定义的。 通常情况下, 静

态代理中的代理类和目标类会实现同一接口或是派生自相同的父类。

动态代理

代理类在程序运行时创建的代理方式被成为 动态代理。 也就是说,这种情

况下,代理类并不是在Java代码中定义的,而是在运行时根据我们在Java代

码中的“指示”动态生成的。

常用的动态代理有两类:JDK动态代理和CGLIB动态代理

如果目标对象实现了接口,采用JDK的动态代理

如果目标对象没有实现了接口,必须采用CGLIB动态代理


AOP:面向切面编程,就是将交叉业务逻辑封装成切面,利用AOP的功能将

切面织入到主业务逻辑中。所谓的交叉业务逻辑是指,

通用的,与业务逻辑无关的代码,如检查、事务、日志等

AOP:面向切面编程:    的优点

1、降低模块之间的耦合度。

2、使系统容易扩展。

3、更好的代码复用。

4、使代码有更好的可读性和易于维护


Aop基本术语:

1.切面:切面泛指交叉业务逻辑,

2 织入:织入是指将切面代码插入到目标对象的过程

3 连接点:连接点指切面可以织入的位置

4 切入点:切入点指切面具体织入的位置



AspetJ的切入点表达式

execution(  * *..service.*.*(..) )

指定所有包下的service子包下所有类(接口)中的所有方法为切入点

execution切入点表达式

第一个 *    代表的是方法的返回值类型

后面的    *..    代表的是多级包

service指的是service这个子包

.*     包下边可以有类和接口

后面的    *     代表的是方法名

(..)    代表方法的参数是任意的


AspectJ对AOP的实现 

对于AOP这种编程思想,很多框架都进行了实现。Spring就是其中之一,可

以完成面向切面编程。然而,AspectJ也实现了AOP的功能,且其实现方式更为简捷,

使用更为方便,而且还支持注解式开发。所以,Spring又将AspectJ的对于AOP的实

现也引入到了自己的框架中。

在Spring中使用AOP开发时,一般使用AspectJ的实现方式


常用的通知有五种类型:

前置通知

后置通知

环绕通知

异常通知

最终通知:无论程序执行是否正常,该通知都会执行。类似于

try..catch中finally代码块。

使用注解来实现这5中通知

切面类的配置

xml中


使用方法


xml配置文件中·


你可能感兴趣的:(Spring 之AOP)