白话 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的 ...
随机推荐
- mac如何查看已连接wifi的密码
可以通道mac自带的“钥匙串访问”功能查看.选择需要查询的wifi名称,右击选择“将密码拷贝到剪贴板”,输入管理员密码后,密码就拷贝好了. 找个地方粘贴即可看到密码
- 【一起学源码-微服务】Nexflix Eureka 源码七:通过单元测试来Debug Eureka注册过程
前言 上一讲eureka client是如何注册的,一直跟到源码发送http请求为止,当时看eureka client注册时如此费尽,光是找一个regiter的地方就找了半天,那么client端发送了 ...
- Kafka学习笔记(四)—— API使用
Kafka学习笔记(四)-- API使用 1.Producer API 1.1 消息发送流程 Kafka的Producer发送消息采用的是异步发送的方式.在消息发送的过程中,涉及到了两个线程--mai ...
- oracle数据库创建实例
数据库已经安装完成,可以正常登陆查看用户等操作 system用户只能用normal身份登陆em.除非你对它授予了sysdba的系统权限或者syspoer系统权限. sys用户具有“SYSDBA”或者“ ...
- JAVA8之 Stream 流(四)
如果说前面几章是函数式编程的方法论,那么 Stream 流就应该是 JAVA8 为我们提供的最佳实践. Stream 流的定义 Stream 是支持串行和并行操作的一系列元素.流操作会被组合到流管道中 ...
- c++ 基础知识回顾 继承 继承的本质就是数据的copy
c++ 基础知识笔记 继承 什么是继承 继承就是子类继承父类的成员属性以及方法 继承的本质就是 数据的复制 是编译器帮我们做了很多操作 class Base { public: Base(){ cou ...
- 关于非旋FHQ Treap的复杂度证明
非旋FHQ Treap复杂度证明(类比快排) a,b都是sort之后的排列(从小到大) 由一个排列a构造一颗BST,由于我们只确定了中序遍历=a,但这显然是不能确定一棵树的形态的. 由一个排列b构造一 ...
- 【题解】P4841 城市规划(指数型母函数+多项式Ln)
[题解]P4841 城市规划 P4841 城市规划 超级弱化版本(DP):POJ - 1737 两张图不同当且仅当边的分布不一样的时候,带编号最后乘一个阶乘即可,现在最主要的问题就是"联通& ...
- MySQL 核心三剑客 —— 索引、锁、事务
一.常见存储引擎 1.1 InnoDB InnoDB 是 MySQL 5.5 之后默认的存储引擎,它具有高可靠.高性能的特点,主要具备以下优势: DML 操作完全遵循 ACID 模型,支持事务,支持崩 ...
- CAS的实现原理
CAS的全称是CompareAndSwap,比较并交换,是Java保证原子性的一种重要方法,也是一种乐观锁的实现方式. 它需要先提前一步获取旧值,然后进入此方法比较当下的值是否与旧值相同,如果相同,则 ...