【问题标题】:What is the relationship of IoC and AOP?IoC和AOP是什么关系?
【发布时间】:2020-01-08 21:10:58
【问题描述】:

我正在阅读 spring 文档this 站点。

而且我已经对 IoC(或 DI)和 AOP 有所了解。

在阅读文档时,我读到了这句话。

其中最重要的是 Spring 框架的控制反转 (IoC) 容器。在对 Spring Framework 的 IoC 容器进行彻底处理之后,紧随其后的是对 Spring 的面向切面编程 (AOP) 技术的全面介绍。

据我所知,IoC是Container如何创建实例并在需要时注入,而AOP是面向透视的编程;如何专注于自己想做的事情。

但是,我理解上面所说的 AOP 工作得很好,这要归功于 IoC。

我不知道这两者之间是什么关系。

等待一个好的答案。

【问题讨论】:

    标签: spring inversion-of-control aop


    【解决方案1】:

    IoC 框架允许通过外部影响注入实现,通常是配置。

    AOP 的目的是在不直接修改代码的情况下实现松散将其他关注点编织到业务逻辑代码中

    Spring 是一个广泛使用 AOP 来实现 IoC 的框架。

    网络上有大量关于这两种模式的阅读材料。 对于 IoC 开始 here。对于 AOP,我发现 this 很有帮助。

    【讨论】:

    • 我不会写另一个答案,因为无论如何这不是一个适合 SO 的问题,但我想评论这个已被接受的问题:AOP 和 IoC 是正交的、不相关的概念这两者恰好都被 Spring 实现并用作开发企业应用程序的工具。例如,AspectJ 完全独立于 Spring 或任何其他容器,您可以在任何 JVM 应用程序中使用。所以你可以在没有 IoC 或依赖注入的情况下使用 AOP。也可以使用没有 AOP 的 IoC 设计模式。所以不要因为 Spring 两者都使用而混淆了这些概念。
    【解决方案2】:

    AOP 主要关注的是全面应用于应用程序的许多组件的抽象功能。例如日志记录和安全性。这些与实际业务功能几乎没有关系,但却是系统范围内必不可少的功能

    IOC或Di主要是松耦合和管理应用程序组件之间的依赖关系。

    【讨论】:

    • 您可以使用 AOP 进行事务处理或事件处理。所以我不确定业务逻辑和其他问题之间的最大区别。
    【解决方案3】:

    通过让您的代码由某种运行时容器管理,IOC 和 AOP 都成为可能。

    容器将依赖项注入到您的构造函数和属性设置器中,而不是您手动执行。 Spring 的座右铭是/曾经是:“创建对象,因此您不必这样做。”

    一旦您的代码在容器中运行,就很容易引入 AOP 概念,这些概念归结为在容器管理的内容之前或之后执行代码。

    IOC 和 AOP 是由运行时容器实现的兄弟实践。从 IOC 容器开始,很容易引入 AOP 特性。从 AOP 容器开始,IOC 功能很容易跟进。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-15
      • 1970-01-01
      • 2015-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多