zoukankan      html  css  js  c++  java
  • 白话 spring AOP

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

          然后悄悄的给他加强。

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

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

  • 相关阅读:
    数据结构:数组、链表、栈、队列的理解
    JVM学习记录-JVM的内存结构管理和运行时数据区理解
    线程池ThreadPoolExecutor的一种扩展办法
    四级地址插件升级改造(京东商城地址选择插件)city-picker
    java8在Collection中新增加的方法removeIf
    使用lambda编程之延迟执行
    JSP的内置对象以及作用域。
    Netty 异步的、事件驱动的网络应用程序框架和工具
    Zookeeper 服务注册和发现
    Jetty 发布web服务
  • 原文地址:https://www.cnblogs.com/helloqiufei/p/11993142.html
Copyright © 2011-2022 走看看