码迷,mamicode.com
首页 > 编程语言 > 详细

白话 spring AOP

时间:2019-12-06 09:25:57      阅读:78      评论:0      收藏:0      [点我收藏+]

标签:没有   java   代理   而且   spring   nbsp   功能   strong   自己   

                                                                     ------------------------------------ 剩下的时间不多了,抓经做自己想做的吧

AOP: 专业术语叫做面向切面的编程

为什么要使用aop: 为了简化代码, 将相同代码抽离处理, 然后在再使用所谓切面, 将这些功能加入进去

将这个抽离出来的功能叫做 advice(增强方法)(在什么地方干什么事情), 问题来了:这个advice 我应该放在类的哪些地方呢?

答: 在类的方法的前后,或者异常的抛出点,你都可以将这些advice 放在这些地方

上面这些可供advice 存放的地方,就叫做 入点”

现在我将advice 插入到 某一个“引入点”, 那么这个“引入点” 就叫做 “插入点”

所以 “引入点” 和 “插入点” 之间是不同时期的同一个东西的叫法, 在没有引入advice 的时候这个叫做 “引入点”

引入“advice” 的时候, 这个叫做 “插入点”;

那现在上面确定, 在某一个具体的地方 “插入点” , 在什么时候干什么事情(advice) , 这个就被专业人士定义为“切面”。

白话描述 “切面”: 我现在手握增强剂, 我在 你睡觉前给你打, 这个就叫切面, 就是 你在什么地方,什么时间,干什么事情。、

 

那么现在我如何使用这个切面, 而且还是在不改变原有类的基础上,让整个程序不知道的基础悄悄的就给你进行了加强处理?

答: 我现在去找一个伪装者,伪装成你原来的样子,然后让JVM 发现不了,我先在已经将你进行替换了,

     在 java 里面如何实现呢? 可以使用多态,实现原来的上一层接口,相当于给这个类找了一个兄, 这个在接口编程的世界里面

     兄弟就可以不知不觉的替换掉了,这个“伪装者” 成功替换, 加强了原来的方法,还是在原有方法不知道的基础上

    上面这些白话 就是 JDK动态代理,限制条件就是被加强的类,必须要有一个上层的接口

 

如果这个类没有这个上层接口怎么办, 本身就是一个孤家寡人怎么办? 

答: 我还是去找一个“伪装者” ,但是这个这个伪装者的身份不是 “兄弟“ 而是 “儿子”, 就是继承这个类

      然后悄悄的给他加强。

 上面的这种就是 CGLIB 动态代理

 

所以通过上面可以发现: AOP的实现是基于动态代理实现的

 

 

 

 

 

 

 

白话 spring AOP

标签:没有   java   代理   而且   spring   nbsp   功能   strong   自己   

原文地址:https://www.cnblogs.com/helloqiufei/p/11993142.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!