白话 spring AOP
------------------------------------ 剩下的时间不多了,抓经做自己想做的吧
AOP: 专业术语叫做面向切面的编程
为什么要使用aop: 为了简化代码, 将相同代码抽离处理, 然后在再使用所谓切面, 将这些功能加入进去
将这个抽离出来的功能叫做 advice(增强方法)(在什么地方干什么事情), 问题来了:这个advice 我应该放在类的哪些地方呢?
答: 在类的方法的前后,或者异常的抛出点,你都可以将这些advice 放在这些地方
上面这些可供advice 存放的地方,就叫做 “引入点”。
现在我将advice 插入到 某一个“引入点”, 那么这个“引入点” 就叫做 “插入点”
所以 “引入点” 和 “插入点” 之间是不同时期的同一个东西的叫法, 在没有引入advice 的时候这个叫做 “引入点”
引入“advice” 的时候, 这个叫做 “插入点”;
那现在上面确定, 在某一个具体的地方 “插入点” , 在什么时候干什么事情(advice) , 这个就被专业人士定义为“切面”。
白话描述 “切面”: 我现在手握增强剂, 我在 你睡觉前给你打, 这个就叫切面, 就是 你在什么地方,什么时间,干什么事情。、
那么现在我如何使用这个切面, 而且还是在不改变原有类的基础上,让整个程序不知道的基础悄悄的就给你进行了加强处理?
答: 我现在去找一个伪装者,伪装成你原来的样子,然后让JVM 发现不了,我先在已经将你进行替换了,
在 java 里面如何实现呢? 可以使用多态,实现原来的上一层接口,相当于给这个类找了一个兄弟, 这个在接口编程的世界里面
兄弟就可以不知不觉的替换掉了,这个“伪装者” 成功替换, 加强了原来的方法,还是在原有方法不知道的基础上
上面这些白话 就是 JDK动态代理,限制条件就是被加强的类,必须要有一个上层的接口
如果这个类没有这个上层接口怎么办, 本身就是一个孤家寡人怎么办?
答: 我还是去找一个“伪装者” ,但是这个这个伪装者的身份不是 “兄弟“ 而是 “儿子”, 就是继承这个类,
然后悄悄的给他加强。
上面的这种就是 CGLIB 动态代理
所以通过上面可以发现: AOP的实现是基于动态代理实现的
白话 spring AOP的更多相关文章
- 白话Spring(基础篇)---AOP(execution表达式)
作为AOP的最后一节内容,我们来简单总结一下切面表达式上见的书写方法.下面的那内容有参考其他博文,在此先对开源博客的各位大神表示感谢! -------------------------------- ...
- 白话Spring(基础篇)---AOP(execution表达式)(转)
[一知半解,就是给自己挖坑] 作为AOP的最后一节内容,我们来简单总结一下切面表达式上见的书写方法.下面的那内容有参考其他博文,在此先对开源博客的各位大神表示感谢! ----------------- ...
- 学习AOP之认识一下Spring AOP
心碎之事 要说知道AOP这个词倒是很久很久以前了,但是直到今天我也不敢说非常的理解它,其中的各种概念即抽象又太拗口. 在几次面试中都被问及AOP,但是真的没有答上来,或者都在面上,这给面试官的感觉就是 ...
- TinyFrame再续篇:整合Spring AOP实现日志拦截
上一篇中主要讲解了如何使用Spring IOC实现依赖注入的.但是操作的时候,有个很明显的问题没有解决,就是日志记录问题.如果手动添加,上百个上千个操作,每个操作都要写一遍WriteLog方法,工作量 ...
- Spring Aop中execution的语法
参考地址:https://blog.csdn.net/zz210891470/article/details/54175107 execution(* com.sample.service.impl. ...
- 学习AOP之深入一点Spring Aop
上一篇<学习AOP之认识一下SpringAOP>中大体的了解了代理.动态代理及SpringAop的知识.因为写的篇幅长了点所以还是再写一篇吧.接下来开始深入一点Spring aop的一些实 ...
- spring aop
什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将 ...
- spring aop注解方式与xml方式配置
注解方式 applicationContext.xml 加入下面配置 <!--Spring Aop 启用自动代理注解 --> <aop:aspectj-autoproxy proxy ...
- 基于Spring AOP的JDK动态代理和CGLIB代理
一.AOP的概念 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的 ...
随机推荐
- Spark RDD的弹性到底指什么
RDD(Resiliennt Distributed Datasets)抽象弹性分布式数据集对于Spark来说的弹性计算到底提现在什么地方? 自动进行内存和磁盘数据这两种存储方式的切换 Spark 可 ...
- redis 的持久化方式
redis 持久化的两种方式 RDB:RDB 持久化机制,是对 redis 中的数据执行周期性的持久化. AOF:AOF 机制对每条写入命令作为日志,以 append-only 的模式写入一个日志文件 ...
- 001 Ceph简介
一.Ceph简介 Red Hat Ceph是一个分布式的数据对象存储,系统设计旨在性能.可靠性和可扩展性上能够提供优秀的存储服务.Ceph分布式存储能够在一个统一的系统中同时提供了对象.块.和文件存储 ...
- 关于KMP的一点思考
关于KMP的一点思考 KMP的\(next\)数组的性质很精妙,有必要开一个坑学习一下 Part 1 啥是next \(next[i]\)表示对于\(pre_i\)这个字符串,这个抠出来的字符串本身后 ...
- $SCOI2009\ windy$数 数位$dp$
\(Sol\) 数位\(dp\)常规套路题. \(dp[i][j]\)表示从低位到高位填到第\(i\)位且第\(i\)位的数字为\(j\)的方案数.答案就是\(sol(r)-sol(l+1).\)这里 ...
- Quartz.NET总结(八)如何根据自己需要配置Topshelf 服务
前面讲了如何使用Topshelf 快速开发windows服务, 不清楚的可以看之前的这篇文章:https://www.cnblogs.com/zhangweizhong/category/771057 ...
- 一些常用查询SQL语句以及显示格式
1.查询当前年.月.周相关时间 1.1.查询当前年份 SELECT TO_CHAR(SYSDATE,'YYYY') AS YEAR FROM DUAL--查询当前年份 SELECT TO_CHAR(S ...
- C#登出系统并清除Cookie
1.前端页面代码: 前端页面代码主要显示退出系统或者网站的可视化按钮代码,代码如下:(请忽略项目关键字:CPU) <ul class="nav navbar-nav navbar-ri ...
- js中如何将伪数组转换成数组
伪数组:不能调用数组的方法, 1.对象是按索引方式存储数据的 2.它具备length属性 {0:'a',1:'b',length:2} //es5伪数组转换成数组 let args = [].slic ...
- leetcode 最大水池
leetcode 11题 水池最大容积 题目描述 给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 ( ...