• 深入理解Spring AOP思想


    什么是AOP?AOP解决了什么问题?

    在传统的开发模式中,以下层次的是非常常见的一种,业务层每一个方法都要有重复的事务代码

      

      如何改善这个问题?

    AOP希望将A、B 这些分散在各个业务逻辑中的相同代码,通过横向切割的方式抽取到一个独立的模块中

    将这些重复性的横切逻辑独立出来很容易,但是如何将独立的横切逻辑 融合到 业务逻辑中 来完成和原来一样的业务操作,这是事情的关键,也是AOP要解决的主要问题。

    Spring对事务管理这一点用了很好的处理方式:即将这些代码段抽取出来,然后,在需要事务控制的地方(**类.**方法)添加一个配置,那么,这个方法就会应用事务控制,无需在代码中编写事务代码

     AOP的实现机制(动态代理)

    1.什么是代理

    满足代理的3个基本要求是

    1.代理人(中介)

    2.需要找代理的主体(用户)

    3.需要代理的事情一定要做,但是主体做的不专业或者没时间做

    2.什么是动态代理,和静态代理有什么区别

    静态代理就是不变的,只针对一种人服务,例如你妈妈帮你找老婆,你是代理的主体,而你妈妈就是代理人,你妈妈只是服务于你,因为你妈妈并不关心其他人有没有老婆,这种你妈帮你找老婆的模式就叫做静态代理,用代码来表示就是 A.class ---->  Proxy.class

    而动态代理就是可变的,针对有需求的人服务,例如婚介所帮你找老婆,你是代理的主体,而婚介所就是代理人,婚介所服务于广大单身人民群众,这种婚介所帮你找老婆的模式就叫动态代理,用代码表示  A.class  、B.class、 等等在运行时确定的结果类,都可以传进去  可以------>   Proxy.class 

    Spring AOP使用动态代理技术在运行期织入增强的代码,使用了两种代理机制,一种是基于JDK的动态代理,另一种是基于CGLib的动态代理。

      1.JDK动态代理

      被代理类实现InvokcationHandler接口 ,原来的类只是一个模板,通过一个配置文件动态读取方法的内容(配合反射) ,通过字节码重组成成为一个新的类,调用时就是调用新的类

      2.CGLIB动态代理(Spring AOP采用)

      不需要任何继承和实现就可以实现动态代理机制,底层原理,通过生成一个动态的类,把动态的类作为子类,继承我们自己的模板类,然后形成新的类,因为子类拥有父类的引用,所以达到动态代理的效果,这样相当于对于开发人员降低要求。

    • aop实现原理其实是java动态代理,但是jdk的动态代理只支持接口代理,所以spring的aop是用cglib这个库实现的,cglib使用了asm这个直接操纵字节码的框架,所以可以做到不实现接口的情况下完成动态代理。
    • 面向切面编程,把散落在程序中的公共部分提取出来,做成切面类,这样的好处在于,代码的可重用,一旦涉及到该功能的需求发生变化,只要修改该代码就行,否则,你要到处修改,如果只要修改1、2处那还可以接受,万一有1000处呢。 AOP底层的东西就是JDK动态代理和CGLIB代理,说白了就是增强类的功能。 最常用的AOP应用在数据库连接以及事务处理上

      

      

  • 相关阅读:
    TCP链接异常断开后,对端仍然ESTABLISH
    mds0: Many clients (191) failing to respond to cache pressure
    Linux C/C++编译过程中的各种not declared in this scope
    Centos7添加磁盘并分区格式化
    Windows Terminal——安装并配置主题
    Kbone——创建项目报错 name can no longer contain capital letters
    Redis——大批量删除redis的key
    Redis——设置最大内存 | key淘汰机制
    Nightingale——滴滴夜莺部署【一】
    ELK——使用Docker快速搭建
  • 原文地址:https://www.cnblogs.com/zhuoqingsen/p/8595625.html
Copyright © 2020-2023  润新知