白话 spring AOP

Posted 自信,自律, 积极

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了白话 spring AOP相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

 

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

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

      然后悄悄的给他加强。

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

 

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

 

 

 

 

 

 

 

以上是关于白话 spring AOP的主要内容,如果未能解决你的问题,请参考以下文章

对 Spring 的核心(AOP 和 IOC)的理解(大白话)

Spring是个什么?大白话解释下 !

白话Spring(中级篇)---拦截器(下)

Spring-白话事物

Spring-aop面向切面

图解spring3-IoC与AOP