Spring的AOP

核心:

AOP(Aspect-Oriented Programming)面向切面编程是一种思想,动态代理是面向切面编程的一种实现方式。AOP是OOP(面向对象编程)的延续。

父子类,用cglib动态代理。

接口,用jdk的动态代理。

Spring,用proxyFactory,整合了上面两种,父子类回去用cglib,接口类会去用jdk的动态代理。

Spring多用注解,注解spring使用AspectJ的注解,但实现是自己实现的,aspectj是在编译的时候把代理的内容直接在字节码文件中生成,spring不是,spring是在运行中用自己的实现方式弄的。

aop核心概念

aspect:切面,定义pointcut、advice等。如spring aop中@aspect所在的类

pointCut:切点。需要代理的类与方法。如spring aop中@Before后的就是pointcut

advice:代理的代码,即需要补充的代码。spring aop中有5中advice,@before、@after@afterReturning、@afterThrowing、@around。每个注解都对应一个实际的执行类,如@Before对应AspectJMethodBeforeAdvice类

在spring中的实现,如下:

cglib动态代理:

jdk的动态代理:

proxyFactory:

其他编程范式

除了AOP(面向切面编程)之外,还有多种编程范式,它们各自具有不同的特点和应用场景。以下是一些常见的编程范式:

  1. 命令式编程(Imperative Programming)
    • 特点:以指令的形式描述计算机执行的具体步骤,关注计算机的状态变化和控制流程。
    • 典型代表语言:C、Java、Python(在一定程度上)等。
    • 描述方式:通过一系列的语句改变程序的状态,以实现特定的计算目标。
  2. 面向对象编程(Object-Oriented Programming, OOP)
    • 特点:将程序组织为对象的集合,对象封装了数据(属性)和行为(方法或函数),强调数据和操作的封装、继承和多态。
    • 典型代表语言:Java、C++、Python、Ruby、C#等。
    • 优点:提高了代码的可重用性、可维护性和可扩展性。
  3. 函数式编程(Functional Programming, FP)
    • 特点:将计算视为数学函数的求值,强调使用纯函数、不可变数据和高阶函数。
    • 典型代表语言:Haskell、Clojure、Scala等,以及JavaScript、Python、Scala等语言中的某些功能。
    • 优点:代码更简洁、易于测试和调试,适合并行处理。
  4. 声明式编程(Declarative Programming)
    • 特点:强调描述问题的状态和关系,而不是明确指定如何解决问题。它包括逻辑编程、函数式编程、数据流编程等多种形式。
    • 典型代表语言:Prolog(逻辑编程)、SQL(数据流编程)、HTML/CSS(在一定程度上)等。
    • 优点:使代码更易于理解和维护,特别是在处理复杂逻辑和数据流时。
  5. 逻辑编程(Logic Programming)
    • 特点:使用逻辑表达式描述问题和解决方案,基于逻辑推理进行计算。
    • 典型代表语言:Prolog。
    • 应用场景:主要用于人工智能、专家系统和自然语言处理等领域。
  6. 并发编程(Concurrent Programming)
    • 特点:处理多个同时执行的计算,关注并发性和并行性。
    • 典型代表语言:Java(通过多线程)、Go、Erlang等。
    • 应用场景:适用于需要高性能和多任务处理的应用程序,如服务器、并行处理和高性能计算等。
  7. 泛型编程(Generic Programming)
    • 特点:通过参数化类型来实现代码的复用和抽象,提供通用的数据结构和算法。
    • 典型代表语言:C++(模板)、Rust等。
    • 优点:提高了代码的可重用性和灵活性。
  8. 反应式编程(Reactive Programming)
    • 特点:通过异步数据流来构建响应式系统,使得系统能够根据数据流的变化做出响应。
    • 典型代表框架:RxJava、Reactor等。
    • 应用场景:适用于需要处理大量数据流和事件流的应用程序,如实时数据分析、Web应用等。

相关推荐

  1. spring AOP和AspectJ AOP区别

    2024-07-16 09:52:03       31 阅读
  2. SpringAOP思想

    2024-07-16 09:52:03       45 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 09:52:03       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 09:52:03       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 09:52:03       62 阅读
  4. Python语言-面向对象

    2024-07-16 09:52:03       72 阅读

热门阅读

  1. Apache Spark 的基本概念和在大数据分析中的应用

    2024-07-16 09:52:03       24 阅读
  2. Linux上启动和停止jar

    2024-07-16 09:52:03       28 阅读
  3. MVCC到底是什么,怎么优化

    2024-07-16 09:52:03       28 阅读
  4. hnust 2179:创建二叉树并计算深度

    2024-07-16 09:52:03       23 阅读
  5. c++练手bug 记录

    2024-07-16 09:52:03       23 阅读