今天是五一收假以来的第一天,距离下一周一共还有四天,这周主要是对Spring的重学习。这四天内我将从以下几个角度进行分析和理解。
(1)AOP的理解和分析
(2)IOC的理解和分析
(3)对bean的理解和分析
(4)spring配置文件的理解和分析
首先今天对AOP的理解和分析,对aop的理解也分开阐述,对一个技术的思考,基本上都是从上学时候课本阐述一个新知识的顺序进行的。第一:什么是AOP?
第二:为什么要引入AOP?或者是AOP解决了什么问题?
第三:如何简单的实现AOP?
第四:AOP对我们写代码时候的思考和帮助是什么?
现在,开始对AOP进行阐述,
1.1 概念介绍
Spring的使命是简化Java代码开发,aop作为Spring的一个子模块,也不例外。
AOP 是 Aspect Oriented Programming(面向切面编程) 的简称,和OOP(面向对象编程)一样是一种编程思想,是对OOP的一种补充。
如何理解什么是AOP呢?以日志为例,在很多管理系统,比如订单系统、推送系统等等都需要把日志记录下来。如果每个业务逻辑里面都写日志的相关代码,那就重复太多了。
干脆把日志的相关逻辑代码,统一封装起来。然后在需要的地方嵌入即可。AOP也主要就是做嵌入这件事的。看下面这张图。
新增订单编辑订单取消订单推送订单日志事务
AOP旨在将横切关注点(crosscutting concern)从业务主体逻辑中进行剥离,实现关注点分离,以提高程序的模块化程度(及业务模块只需关注业务逻辑,无需关注日志、安全、事务等通用逻辑)
上面提到了一些名词,比如说,切面、关注点、横切等,下面对这些名词进行解释。
1.2 名词解释
AOP有自己的一套术语,我们必须了解一下这些行话,才能更好地理解AOP。为了方便大家理解,下面将用课代表收作业作为例子。
通知 (Advice)
定义了在收作业前后需要做的事。常见的通知类型有:before、after、after-returning、around等。
连接点 (JoinPoint)
连接点指程序运行时允许插入切面的一个点,可以是一个函数、一个包路径、一个类、或者抛出的异常。有点类似于可以收作业的时间点。
切点(PointCut)
切点用于定义切面的位置,也就是捕获哪些连接点的调用然后执行"通知"的操作(什么地点)。
切面(Aspect)
切面是切点和通知的聚合,定义了在哪一个切点做什么通知。
目标对象( Target )
指被切面织入的对象。
引入(Introduction)
引入允许我们向现有的类添加新方法或属性。
织入(Weaving)
织入是把切面应用到切点对应的连接点的过程。切面在指定连接点被织入到目标对象中。