【框架】123:spring框架之面向切面编程
今天是刘小爱自学Java的第123天 。
感谢你的观看 , 谢谢你 。
文章图片
学过很多面向XX编程 , 比如:
面向过程编程 , 面向对象编程 , 面向接口编程 , 现在又是面向切面编程 。
但是不管如何 , 说来说去最终都是面向搜索引擎编程:面向百度编程 , 面向谷歌编程 。
今日学习内容安排:
AOP的引入 , 它到底是干嘛的?
AOP面向切面编程的思想概述 , 以及其常见术语的解释说明 。
两种AOP底层实现机制 , 同时也是对动态代理的再一次回顾学习 。
本来是打算将AOP知识点糅合到一篇文章中说明的 , 但是内容实在是太多了 , 写了近三千字一半都还没有学到 , 看来还是得慢慢来了 。
一、AOP的引入
在学它之前 , 我们先要搞清楚它是干嘛的?
dao层的方法基本都是增删改查 , 现在需要将所有方法都增加打印日志的功能 , 怎么办?
如果我们每个方法里面都实现打印日志的功能 , 那也太复杂了 , 所以选择封装:
文章图片
方法的封装
我们将打印日志的功能封装到一个特有方法中 , 只需要在其它方法中调用该方法即可 。
但是这样就有一个很大的问题:
dao层不只有userDao这个类 , 还有其它的类 , 也需要打印日志的功能 , 那怎么办?
继承
我们将打印日志的功能封装到一个类中 , 哪个类需要该方法就继承它即可 , 根据继承的原则:子类可以直接使用父类的方法 。
但是代码还是有问题 , 会出现代码的侵入 。
有没有方法可以不用修改类中方法的任何内容 , 就能实现方法的拓展?
有 , 就是代理类的使用 。
注意:我举的这些例子都是伪代码 , 并不代表本身的业务逻辑 , 只是为了引出AOP的概念 。
文章图片
代码的侵入
我们想给方法增加功能 , 使用继承的话都需要在对应方法中调用一个打印日志的方法 。
对方法本身修改了 , 有代码侵入 , 这是不符合OCP原则的 , 即对扩展开放 , 对修改关闭:你增强我的功能可以 , 但你不可以修改我 。
使用代理
在被代理类方法的基础上 , 拓展了一个打印日志的方法 , 本身的方法并没有发生任何变化 。
当然这里也是伪代码 , 并没有使用到动态代理 , 文章后面有更详细的一步步说明 。
我们以继承->代理的这种代码变化过程 , 引出AOP面向切面编程的概念 。
二、AOP概述及相关术语
AOP全称AspectOrientedPrograming , 翻译为面向切面编程 , 它是一种编程思想 。
我们都知道Java是一门面向对象编程的 , 即OOP全称ObjectOrientedProgramming 。
AOP是OOP的延续 , 采取横向抽取机制 , 取代了传统纵向继承体系重复性代码的编写 。
简单的理解就是 , 它的作用和继承很像 , 但是它比继承要更强 , 用一句来说明AOP就是:
基于原有目标对象 , 创建代理对象 , 在不修改原对象代码情况下 , 通过代理对象调用增强功能的代码 , 从而对原有方法进行增强 。
关于AOP编程相关术语
这些术语太生涩难懂了 , 每一个概念涉及到的知识面还很广 , 想要完全弄懂太难了 。
这里用一个例子来做说明 , 当然说明并不是很准确 , 但是对于新手来说方便理解记忆 。
- 【日记】149微服务项目第19天
- 【日记】134微服务项目第4天
- 【微服务】146:商品品牌业务后台Java代码编写
- 【日记】120:?25岁了,好想知道牵女孩子的手是什么感觉
- 【日记】146祝我生日快乐?
- 【微服务】162:利用Java实现索引库相关的分页、排序和聚合
- 买华为手机的人真的在乎性价比吗?
- 【框架】124:spring框架之切面编程步骤说明
- 高价低配不值得买,vivox90性能超越骁龙8+旗舰
- 为了回归主流,三星煞费苦心,三星手机出镜率越来越高了