spring的AOP

来源:互联网 发布:js修改a标签的href 编辑:程序博客网 时间:2024/06/05 16:34

Aop

面向切面编程    aspect oriented programing

aop关注的不再是程序代码中的某个类,某些方法,考虑更多的是一种面到面的切入,即层与层之间的一种切入。

用处:

aop主要用于日志记录,性能统计,安全控制,事务处理等方面,实现公共功能性的重复使用。

好处:

1. 降低模块与模块之间的耦合度,提高业务代码的聚合度。

2. 提高代码的复用性。

3. 提高系统的扩展性。


基本概念

连接点 Joinpoint

被拦截到的每个点,spring中指被拦截到的每一个方法,spring aop 一个连接点即代表一个方法的执行。

切入点 Pointcut

对连接点进行拦截的定义。即匹配规则的定义,规定拦截哪些方法,对哪些方法进行处理。

通知 advice

拦截到每一个连接点后要做的操作。

前置通知 before:执行连接点方法前通知

返回通知 afterturn:连接点方法正常结束后返回的通知

异常通知 afterThrow:连接点方法出异常时通知

最终通知 after :连接点方法结束时通知

环绕通知 around:包围连接点方法的通知

切面 Aspect

切面则是横切关注点的抽象。

目标对象 Target

被代理的目标对象

织入 Weave

将切面应用到目标对象,并生成代理对象的这个过程即为织入

引入 Introduction

在不修改原有应用程序代码的情况下,在程序运行期为类动态添加方法或者属性的过程为引入。


AOP处理日志问题

1. 命名空间 2 配置aop代理 <aop:aspectj-autoproxy/>


代理模式实现三要素

1.接口定义 2.目标对象和代理对象实现统一的接口 3. 代理对象持有目标对象的引用,增强目标对象行为

代理模式实现分类以及对应区别

静态代理:手动为目标对象制作代理对象,即在程序编译阶段完成代理对象的创建

动态代理:在程序运行期动态创建目标对象对应的代理对象

jdk动态代理:被代理目标对象必须实现摸一个或某一组接口,通过回调创建代理对象。

cglib动态代理:被代理目标可以不必实现接口,通过继承实现。

动态代理好处:提高开发效率,可以批量化创建代理,提高代码复用率。

原创粉丝点击