说明:
(1)【Spring AOP面向切面编程技术】:Spring提供的一种可插拔的组件技术;
(2)【Spring AOP面向切面编程技术】:对于程序来说,相当于是一个额外增加的外挂;
(3)本篇博客,仅仅介绍了Spring AOP的概念性内容,不涉及具体细节;即本篇博客的目的,仅仅是理解Spring AOP的大体作用;
目录
零:【Spring AOP面向切面编程】部分,包括以下三部分内容;
零:【Spring AOP面向切面编程】部分,包括以下三部分内容;
一:【Spring AOP面向切面编程技术】结合场景的分析
1.【Spring AOP面向切面编程】的一个引入案例
(1)传统的做法:
说明阐述:
(1)如上图所示,,某个项目中有两个模块,可以认为这个两个模块是相对独立的;假如,此时要给这两个模块添加权限过滤的功能,即,只有拥有权限的用户才能够访问执行对应的模块;
(2)传统的做法,在两个模块的代码中去增加有关权限控制的代码(自然,增加的权限控制代码的位置,是在软件模块的实际代码前面;因为,只有执行了权限控制代码,并且发现权限OK的情况下,才会去执行软件模块中具体的业务代码);
(3)传统的做法,自然可以实现上述需求。但是,假如后来我们又不需要权限过滤的功能了,此时应该怎么办?:按照传统的做法是,需要修改源代码,把权限过滤的代码给去掉;
(4)可以感觉到,传统的做法,需要频繁修改业务逻辑源代码,而且同一个权限过滤代码需要在不同的模块中都写一遍;挺不好的;
(5)和【传统的做法】相比,【Spring AOP面向切面编程技术】是一种更好的解决策略;
(2)基于【Spring AOP面向切面编程技术】的做法:
说明阐述:
(0)所谓面向切面编程,是指在执行前或者执行后,都可以去额外的增加扩展功能;这个扩展功能就称之为切面;
(1)如上图,在软件模块执行前,增加了权限过滤的切面;如果一个用户拥有访问模块A或模块B的权限,那么就可以向下执行模块A或模块B;如果一个用户没有权限,那么这个权限切面,就会把用户挡在外边,不能去访问模块A或模块B;即,此时,对于这个权限切面来说,其起的作用就是拦截功能;
(2)如上图,在程序运行完之后,可以增加日志切面;日志切面是对当前软件运行过程中【什么时间运行的、参数是什么、结果是什么】作记录的,方便程序的调试和跟踪;
(3)权限切面和日志切面,对于模块A或模块B来说都是额外附带的外挂;模块A或模块B在运行时,也感觉不到权限切面或日志切面的存在;
(4)假如后来我们不需要权限过滤的功能和日志功能了,此时应该怎么办?:只需要在配置文件中进行简单的调整,就能把权限切面和日志切面,从当前系统中给移除;
2.【Spring AOP面向切面编程】分析
(1)【Spring AOP面向切面编程技术】有点类似于日常浏览器中安装的各种插件;比如,QQ浏览器中的翻译插件,该插件可以实时将网页中的英文转换为中文;如果以后我们不需要这个功能了,就可以把这个插件给卸掉;在这个过程中,对于网页本身来说,其是感受不到翻译插件的存在的。即,之所以举翻译插件的例子,其目的就是为了说明如下内容:对于【Spring AOP面向切面编程技术】,可以将其看成是【在原有业务模块软件功能的基础上,额外的增加了一些插件】在实际开发时,这些插件可以根据需要与否,随时拔插;
(2)为什么【Spring AOP面向切面编程技术】编写的这些外挂式的扩展空能,被称为Aspect(切面)嘞?:如下图,这些【Spring AOP面向切面编程技术】的东西,就像是横切面一样,穿插在了原始的软件模块的运行过程中;其为原始的业务代码提供了额外的扩展。所以将【Spring AOP技术,称为面向切面编程技术】。(个人感觉,之所称之为切面,似乎可以这样理解下:是因为基于Spring AOP开发的程序,没有陷入到程序原本的逻辑代码的泥淖中,换句话说其和程序原本的逻辑代码耦合性几乎为零;基于Spring AOP开发的程序,横行在工程中,哪儿需要这个功能其就可以横扫到哪儿,横扫到哪儿就在哪儿起作用,)
三:Spring AOP简介
(1)AOP将通用的、与业务无关的功能抽象分装为切面类,再通过配置的方式加入到当前系统中;
(2)【Spring AOP面向切面编程技术】真正的目的是,在不修改源代码的情况下,对程序行为进行扩展;