zoukankan      html  css  js  c++  java
  • SpringAOP的介绍

    我们可以使用IOC的知识将代码中层与层之间的耦合性进行解耦,便于后期维护.但是在实际生产环境中,我们发现随着公司业务的增长,我们会升级某个业务层的业务方法的代码逻辑.升级后的业务方法还需要兼容以前的逻辑处理,也就说再保留原有功能逻辑的基础上,在方法中新增新的逻辑代码.而这个时候,就需要我们去修改当前功能方法的源码,增加新的逻辑代码,然后重新运行项目.这时候出现如下问题:

    ①假如我们有当前功能方法的源码,就需要阅读当前方法的源码,然后再增加自己的新的逻辑代码.并且修改好后,需要将新的类文件替换旧的类文件,而阅读代码本身效率极低.
    ②假如我们没有源码文件,那么就无法直接修改源码增加新的功能逻辑,怎么 ?

    解决:

    在不修改原有功能逻辑的基础上完成功能扩展.

    方案:

    A对象中有一个testA的方法,A--->testA(),现在需要升级testA方法.创建一个B对象,在B对象中声明一个testB方法,然后在testB中调用testA方法,并且在testB中声明扩展代码.然后将代码中调用A对象的testA方法的代码替换为调用B对象的testB方法.完成了升级.为了方便代码的替换,可以让A和B都实现接口C,将要进行功能扩展的方法在C中声明,这样就只需要将A对象替换为B对象,就不需要修改调用方法了.但是将A替换为B对象,如果有10000个代码都在调用A对象,就需要替换10000次,并且容易遗漏,考虑使用IOC.

    原理图:

    SpringAOP的SchemaBase方式实现

    SpringAOP的本质总结:

    我们将要进行功能扩展相关的材料以及对应的组织规则告诉Spring容器,Spring容器帮我们动态创建一个代理对象。我们直接从Spring容器中获取代理对象完成功能开发。

    导入SpringAOP的jar包

    src下创建包advice,并创建前置通知类和后置通知类

    前置通知类

    创建一个普通的java类,实现MethodBeforeAdvice接口, 重写before方法,在before方法中声明扩展前的逻辑代码。

    后置通知类:

    创建一个普通的Java类,实现AfterReturningAdvice接 口,重写after方法,并在after方法中声明扩展后的逻 辑代码

    applicationcontext.xml文件中配置资源的bean对象以及声明组装规则。

    资源对象:

    要进行功能扩展的bean对象

    前置通知的bean对象

    后置通知的bean对象

    声明组装规则:(使用AOP标签完成)

    声明切点

    声明组装

    Spring容器中直接获取代理对象完成功能开发

    注意:如果让Spring容器对象某个bean对象按照AOP进行功能扩展,则从Spring容器中使用该对象的ID获取的对象已经不是其本身了,而是他的代理对象(夺舍)

  • 相关阅读:
    linux下设置SSH无密码登陆
    设置sudo权限
    集群重启后启动ambari-server访问Web页面无法启动集群解决
    使用Ambari部署hadoop集群
    centos7.6安装python3.7
    Locust
    测试框架(自然语言)
    Maven之(七)pom.xml配置文件详解
    git的使用
    elastic search(es)安装
  • 原文地址:https://www.cnblogs.com/vincentmax/p/14299194.html
Copyright © 2011-2022 走看看