zoukankan      html  css  js  c++  java
  • 什么是AOP面向切面编程思想

    一、什么是AOP?

    1.AOP不是一种语言,是一种编程范式

    • 常见的编程范式:
    • 面向过程、面向对象、函数式编程、事件驱动编程等

    2.AOP可以解决特定问题,不能解决所有问题。

    3.是面向对象的补充,不是替代。

    Aop的初衷:

     AOP的应用场景:


    • 权限控制
    • 缓存控制
    • 事务控制
    • 审计日志
    • 性能监控
    • 分布式追踪
    • 异常处理

     支持AOP的编程语言很多~

    通俗的说:

    抽象:抽取特别像的东西。

    如图,是一种横向的抽取,所以叫做面向切面。

    下面两个图简单的体现了AOP的原理↓↓↓

    在软件开发中,散布于应用中多处的功能被称为横切关注点(cross-cutting concern)。通常来讲,这些横切关注点从概念上是与应用的业
    务逻辑相分离的(但是往往会直接嵌入到应用的业务逻辑之中)。把这些横切关注点与业务逻辑相分离正是面向切面编程(AOP)所要解决的问题。

    这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。

    AOP是Spring提供的关键特性之一。AOP即面向切面编程,是OOP编程的有效补充。

    使用AOP技术,可以将一些系统性相关的编程工作,独立提取出来,独立实现,然后通过切面切入进系统。

    从而避免了在业务逻辑的代码中混入很多的系统相关的逻辑——比如权限管理,事物管理,日志记录等等。

    这些系统性的编程工作都可以独立编码实现,然后通过AOP技术切入进系统即可。从而达到了 将不同的关注点分离出来的效果。

    二、AOP术语?

    连接点(JoinPoint):

      程序执行的某个特定位置,如某个方法调用前,调用后,方法抛出异常后,这些代码中的特定点称为连接点。简单来说就是在哪里加入增强。

    切点(PointCut):

      每个程序的连接点有多个,如何定位到感兴趣的连接点,就需要切点来定位,比如:如果连接点 -- 数据库的记录,切点 -- 查询条件。

    增强(Advice):

      增强是织入到目标类连接点上的一段代码,在Spring中,像BeforeAdvice等还带有方位信息。

    目标对象(Target):

      需要被加强的业务对象

    织入(Weaving):

      织入就是将增强添加到对目标类具体连接点上的过程。

    代理类(Proxy):

      一个类被AOP织入增强后,就产生了一个代理类

    切面(Aspect):

      切面由切点和增强组成,它既包括了横切逻辑的定义,也包括了连接点的定义,SpringAOP就是将切面所定义的横切逻辑织入到切面所制定的连接点中。

     

    三、AOP实现者?

    AspectJ

      语言级的AOP实现,扩展了Java语言,定义了AOP语法,能够在编译器通过提供横切代码的织入,所以它有一个专门的编译器用来生成遵守Java字节码规范的class文件。

    SpringAOP(掌握)

      SpringAOP使用纯java实现,在运行期间通过代理的方式向目标类织入增强代码。

    四、代理模式?

     

      代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。
      想象一下我们生活中的购买火车票的情节,我们可以从官网上直接购买,也可以到售票的窗口购买,这是从官方购买,在编程中,这个过程就是指从提供这个功能的类直接获取这个功能。
      当然了,我们也可以从售票厅旁边的小超市,或者其他地方代售火车票的地方购买火车票,那么这些代销处就是代理了火车站的售票功能,那么他们就是代理。

      代理模式分为静态代理和动态代理,详见:https://www.jianshu.com/p/f56e123817b5

     

  • 相关阅读:
    C:表达式、语句、声明
    SAIO Swift All In One Diablo版 安装指南 Alpha
    Python自然语言处理学习笔记(60):7.1 信息抽取
    Python自然语言处理学习笔记(59):练习
    Python自然语言处理学习笔记(62):7.3 开发和评价分块器
    doctest模块的使用说明
    Python自然语言处理学习笔记(61):7.2 分块
    Python自然语言处理学习笔记(57):小结
    使用cURL操作Openstack对象存储的ReST API
    认证系统
  • 原文地址:https://www.cnblogs.com/yangf428/p/12305958.html
Copyright © 2011-2022 走看看