spring框架之AOP面向切面编程

【spring框架之AOP面向切面编程】今天是刘小爱自学JAVA的第123天 。
感谢你的观看 , 谢谢你 。

spring框架之AOP面向切面编程

文章插图
 
学过很多面向XX编程 , 比如:
面向过程编程 , 面向对象编程 , 面向接口编程 , 现在又是面向切面编程 。
但是不管如何 , 说来说去最终都是面向搜索引擎编程:面向百度编程 , 面向谷歌编程 。
今日学习内容安排:
  • AOP的引入 , 它到底是干嘛的?
  • AOP面向切面编程的思想概述 , 以及其常见术语的解释说明 。
  • 两种AOP底层实现机制 , 同时也是对动态代理的再一次回顾学习 。
本来是打算将AOP知识点糅合到一篇文章中说明的 , 但是内容实在是太多了 , 写了近三千字一半都还没有学到 , 看来还是得慢慢来了 。
一、AOP的引入在学它之前 , 我们先要搞清楚它是干嘛的?
dao层的方法基本都是增删改查 , 现在需要将所有方法都增加打印日志的功能 , 怎么办?
如果我们每个方法里面都实现打印日志的功能 , 那也太复杂了 , 所以选择封装:
spring框架之AOP面向切面编程

文章插图
 
①方法的封装
我们将打印日志的功能封装到一个特有方法中 , 只需要在其它方法中调用该方法即可 。
但是这样就有一个很大的问题:
dao层不只有userDao这个类 , 还有其它的类 , 也需要打印日志的功能 , 那怎么办?
②继承
我们将打印日志的功能封装到一个类中 , 哪个类需要该方法就继承它即可 , 根据继承的原则:子类可以直接使用父类的方法 。
但是代码还是有问题 , 会出现代码的侵入 。
有没有方法可以不用修改类中方法的任何内容 , 就能实现方法的拓展?
有 , 就是代理类的使用 。
注意:我举的这些例子都是伪代码 , 并不代表本身的业务逻辑 , 只是为了引出AOP的概念 。
spring框架之AOP面向切面编程

文章插图
 
③代码的侵入
我们想给方法增加功能 , 使用继承的话都需要在对应方法中调用一个打印日志的方法 。
对方法本身修改了 , 有代码侵入 , 这是不符合OCP原则的 , 即对扩展开放 , 对修改关闭:你增强我的功能可以 , 但你不可以修改我 。
④使用代理
在被代理类方法的基础上 , 拓展了一个打印日志的方法 , 本身的方法并没有发生任何变化 。
当然这里也是伪代码 , 并没有使用到动态代理 , 文章后面有更详细的一步步说明 。
我们以继承->代理的这种代码变化过程 , 引出AOP面向切面编程的概念 。
二、AOP概述及相关术语AOP全称Aspect Oriented Programing , 翻译为面向切面编程 , 它是一种编程思想 。
我们都知道Java是一门面向对象编程的 , 即OOP全称Object Oriented Programming 。
AOP是OOP思想上的延续 , 采取横向抽取机制 , 取代了传统纵向继承体系重复性代码的编写 。
简单的理解就是 , 它的作用和继承很像 , 但是它比继承要更强 , 用一句来说明AOP就是:
基于原有目标对象 , 创建代理对象 , 在不修改原对象代码情况下 , 通过代理对象调用增强功能的代码 , 从而对原有方法进行增强。
关于AOP编程相关术语
这些术语太生涩难懂了 , 每一个概念涉及到的知识面还很广 , 想要完全弄懂太难了 。
这里用一个例子来做说明 , 当然说明并不是很准确 , 但是对于新手来说方便理解记忆 。
spring框架之AOP面向切面编程

文章插图
 
①目标对象Target
也就是需要被增强的对象 。
②织入Weaving
根据目标对象来创建代理对象的整个过程 。
③代理对象Proxy
即根据目标对象生成的代理对象 。
④连接点JoinPoint
所谓连接点是指那些被拦截到的点 。


推荐阅读