Java 中 的 AOP

java 分享会

分享人:常雷雷

1.背景介绍

2.知识剖析

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.参考文献

8.更多讨论

1.背景介绍

AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。 利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

2.知识剖析

AOP可以说是OOP(面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。 不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。 日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能毫无关系对于其他类型的代码,如安全性、异常处理和透明的持续性也都是如此,这种散布在各处的无关的代码被称为横切(cross cutting)。 在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。

1、横切关注点:对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点

2、切面(aspect):类是对物体特征的抽象,切面就是对横切关注点的抽象

3、连接点(joinpoint):被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截到的方法.

4、切入点(pointcut):对连接点进行拦截的定义

5、通知(advice):所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、异常、最终、环绕通知五类

6、目标对象:代理的目标对象

7、织入(weave):将切面应用到目标对象并导致代理对象创建的过程

8、引入(introduction):在不修改代码的前提下,引入可以在运行期为类动态地添加一些方法或字段.

3.常见问题

1.面向切面编程(AOP),那我们说的切面到底是什么?

2.如何应用AOP思想编程。

4.解决方案

1.到底是切什么呢?

切的是方法,是业务处理的流程。把一连串的方法切开。

2.切开做什么?

添加代码.在不影响源代码的前提下添加代码。

3.如何添加代码

5.编码实战

基于注解

基于配置

6.扩展思考

基于注解与基于配置文件的优缺点

注解:是一种分散式的元数据,与源代码紧绑定。

xml:是一种集中式的元数据,与源代码无绑定。

注解的缺点: 1、很多朋友比如在使用spring注解时,会发现注解分散到很多类中,不好管理和维护;这个其实要借助工具,我目前使用的是IDEA,它在这方面表现的非常好;当然现在还有Spring的STS,也是不错的; 所以借助工具,能解决这个问题; 2、注解的开启/关闭必须修改源代码,因为注解是源代码绑定的,如果要修改,需要改源码,这个有这个问题,所以如果是这种情况,还是使用XML配置方式;比如数据源; 3、注解还一个缺点就是灵活性,比如在之前翻译的Spring Framework 4.0 M1: WebSocket 支持;在实现复杂的逻辑上,没有XML来的更加强大;注解就是要么用,要么不用,比如之前的jpa bean validation,要么全,要么没;遇到这种情况很痛苦;
注解的好处: 1、XML配置起来有时候冗长,此时注解可能是更好的选择,如jpa的实体映射;注解在处理一些不变的元数据时有时候比XML方便的多,比如springmvc的数据绑定,如果用xml写的代码会多的多; 2、注解最大的好处就是简化了XML配置;其实大部分注解一定确定后很少会改变,所以在一些中小项目中使用注解反而提供了开发效率,所以没必要一头走到黑; 3、注解相对于XML的另一个好处是类型安全的,XML只能在运行期才能发现问题。 注解也好,XML也好,我们还是需要一些开关/替换机制来控制特殊需求,以改变那种要么全部 要么没有的方案。。

7.参考文献

链接:http://blog.csdn.net/u010987379/article/details/52152925 作者:u010987379

链接:http://blog.csdn.net/onlylove_longshao/article/details/53560785 作者:OnlyLove_longshao

链接:https://www.cnblogs.com/yncx/p/5990774.html 作者:一怒成仙

8.更多讨论

鸣谢

感谢观看,如有出错,恳请指正

BY : 深圳分院 常雷雷