IoC(控制反转)和AOP(面向切面编程)之间的关系是什么?

3

我正在阅读Spring文档这个网站 。

我已经有一点IoC(或DI)和AOP的知识。

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

其中最重要的是Spring Framework的Inversion of Control(IoC)容器。Spring Framework的IoC容器得到了全面的介绍,其后紧随着对Spring面向切面编程(AOP)技术的全面介绍。

据我所知,IoC是容器在需要时创建实例并注入它们的方式,而AOP则是面向透视编程;你可以专注于想要做的事情。

然而,我理解上述短语是AOP之所以能够很好地工作,多亏了IoC。

我不确定两者之间的关系。

等待一个好答案。

3个回答

4

IoC框架通过外部因素,通常是配置,允许对实现进行注入。

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

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

关于这两种模式,网络上有大量的阅读材料。关于IoC,请从这里开始。 对于AOP,我发现这篇文章很有帮助。


4
我不会再写一个答案,因为这个问题不适合在SO上回答,但我想评论一下被接受的答案:AOP和IoC是正交、不相关的概念,它们都恰好被Spring作为开发企业应用程序的工具来实现和使用。例如,AspectJ与Spring或任何其他容器完全独立,您可以在任何JVM应用程序中使用它。因此,您可以在没有IoC或依赖注入的情况下使用AOP。同样也可以使用IoC设计模式而不使用AOP。因此,不要因为Spring同时使用两者而混淆这些概念。 - kriegaex

1
AOP主要关注抽象出适用于应用程序中许多组件的功能,例如日志记录和安全性。这些与实际业务功能几乎没有关系,但是它们是必要的系统范围功能。
IOC或Di主要是松耦合和管理应用程序组件之间的依赖关系。

你可以使用AOP来处理事务或事件。因此,我不确定业务逻辑和其他问题之间的重大区别是什么。 - Robert Moskal

0

IOC和AOP都是通过让您的代码由某种运行时容器管理而实现的。

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接