Java三十九篇:回顾Spring(2)

SpringAOP

AOP:A是Aspect,表示切面。AOP就是面向切面编程的意思。

在业务层中为了对事务进行管理,通常会有如下的代码模板,而且是每一个业务层方法都需要执行如下的步骤。

这样出来的代码冗余程度高(可维护性差)。处理代码冗余问题最常规的思路就是将公共代码提取出来,大家一起使用。

Java三十九篇:回顾Spring(2)
img

那么我们现在将公共模块抽取出来。

将事务管理的公共部分抽取出来成为一个类。

该类中具备4个方法:

Java三十九篇:回顾Spring(2)
img

代码拆分之后如何合在一起是一个问题,我们可以使用代理模式来完成这个过程。

代理模式:

代理模式中有两个角色:代理对象和目标对象(原对象)

代理对象通过持有目标对象,对目标对象的方法进行增强处理。

动态代理:由Java或者第三方的程序,代替我们来完成代理对象的创建过程。

动态代理有两种JDK动态代理和CGLIB的动态代理

以JDK动态代理为例:

1.我们需要将代理中需要执行的代码(事务管理的这一部分代码)封装起来。

proxy.transfer();

在调用动态代理的方法时,根据源码分析可以得知执行的是传入的InvocationHandler中的invoke方法。执行Invoke方法时传入了正在执行的这个transfer方法对象,同时还有执行该方法的参数。在InvocationHandler的invoke方法中封装事务管理的代码,然后通过反射执行目标对象的transfer方法。

Java三十九篇:回顾Spring(2)
img

代理模式总结:

动态代理共两种:JDK    CGLIB

JDK只能代理实现了接口的类,CGLIB都可以

JDK代理对象是目标对象的兄弟,他们实现了同一个接口。CGLIB代理对象是目标对象的子类。

我们在上面的案例中使用动态代理完成了统一的事务管理。那这种解决问题的方式就是面向切面的雏形。

面向切面编程编程的重要概念:

面向切面:将代码以横向的形式切入到某些方法中。

advice:通知,封装公共部分代码的类。根据切入位置的不同通知一共可分为5种。

前置增强、后置增强、异常增强、最终增强、环绕增强

join point:连接点,进行代码切入的某一个具体的方法。

point cut:切入点,描述所有连接点集合的一种规则。

通知代表了要切入的内容,切入点代表要切入的方法。

aspect:切面,切入点和通知构成一个切面。

weave :织入(编织),在判定目标对象处于切入点之上时,通过代理对象的方式将通知和目标对象编制在一起成为代理对象的过程。

SpringAOP就是建立在AOP思想之上的一套框架程序。我们可以通过配置或者注解将切入点信息和通知信息全部告知给Spring,Spring的IOC在创建对象时如果发现该对象处于切入点之上的,就会采用动态代理的方式来创建这个对象并且将通知代码织入进去。

下一篇:回顾Spring整合Mybatis


                 Java三十九篇:回顾Spring(2)

本篇文章来源于微信公众号: 小刘Java之路

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/11038.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!