我试图理解AOP,依赖注入和控制SPRING的反转相关概念,但是我很难理解。
谁能用简单的英语解释一下?
我了解您的困惑,花了一些时间来了解这些概念如何相互关联。所以这是我对这一切的解释(某种程度上是个人的):
1.控制反转
控制反转是一种设计原则,而不是通用的,它是指行为规范与实际执行时的行为脱钩。比较一下
myDependency.doThis();
与
myDependency.onEventX += doThis();
在后者中, 没有直接调用 会更灵活。一般而言,控制反转与 观察者模式 , 事件 或 回调有关 。
2.依赖倒置
依赖倒置是另一种设计原则。粗略地说,它说较高级别的抽象不应直接依赖于较低级别的抽象。这确实导致了这样的设计:如果没有低层抽象,就不能重用高层抽象。
class MyHighLevelClass {
MyLowLevelClass dep = new MyLowLeverClass();
}
class App {
void main() { new HighLevelClass().doStuff(); }
}
在这里,MyHighLevelClass
无法访问无法编译MyLowLevelClass
。为了打破这种耦合,我们需要使用接口对低层类进行 抽象
,并删除直接实例化。
class MyLowLevelClass implements MyUsefulAbstraction { ... }
class MyHighLevelClass {
MyUsefulAbstraction dep;
MyHighLevelClass( MyUsefulAbstraction dep ) {
this.dep = dep;
}
}
class App {
void main() { new HighLevelClass( new LowLevelClass() ).doStuff(); }
}
请注意,原则上不需要像容器之类的特殊功能来强制执行依赖关系反转。鲍勃叔叔的《依赖倒置原理》是一本好书。
3.依赖注入
现在是依赖注入。对我来说dependency injection = IoC + dependency inversion
:
在上面我提供的示例中,如果使用容器实例化对象并自动 将 依赖项 注入 到构造函数中,则可以完成依赖项注入(我们常说DI容器):
class App {
void main() { DI.getHighLevelObject().doStuff(); }
}
请注意,有多种注射形式。还要注意,在这种情况下,setter注入可以看作是回调的一种形式-
DI容器创建对象,然后回调setter。控制流实际上是反向的。
4. AOP
严格来说,AOP与之前的3点无关。关于AOP的开创性论文非常笼统,提出了将各种来源(可能用不同的语言表示)编织在一起以产生有效软件的想法。
我不会在AOP上进行更多说明。这里重要的是,依赖项注入和AOP可以有效地很好地配合使用,因为它使编织非常容易。如果使用IoC容器和依赖项注入来抽象对象的实例化,则可以在注入依赖项之前轻松地使用IoC容器来编织方面。否则,这将需要特殊的编译或特殊的ClassLoader
。
希望这可以帮助。
借助Spring实现具有依赖关系的对象之间的解耦。 对象A运行需要对象B,由主动创建变为IOC容器注入,这便是控制反转。 获得依赖对象的过程被反转了,获取依赖对象的过程由自身创建变为由IOC容器注入,这便是依赖注入。
问题内容: 人们经常提到“依赖注入”和“控制反转”,这是使用Spring框架开发Web框架的主要优点。 如果可能的话,有人可以用一个简单的例子来解释它吗? 问题答案: 由于依赖注入, Spring有助于创建松耦合的应用程序。 在Spring中,对象定义其关联(依赖关系),而不必担心它们将如何获得这些依赖关系。Spring的责任是提供创建对象所需的依赖关系。 例如:假设我们有一个对象,并且它对对象有
2.1依赖注入和控制反转 Java应用程序-这是一个宽松的术语,它包括的范围从受限的嵌入式应用程序到n层的服务器端企业应用程序-通常组成程序的对象互相协作而构成正确的应用程序。因此,在一个应用程序中的对象彼此具有_依赖关系(dependencies)。_ 虽然Java平台提供了丰富的应用程序开发功能,但它缺乏将基本的模块组织成一个整体的方法,而将该任务留给了架构师和开发人员。虽然你可以使用如_工厂
2.1 依赖注入和控制反转 Java应用程序——范围从受限的、嵌入式的应用到N层的、服务器端的企业应用——通常由协作形成该程序的对象构成,因此一个应用程序中的对象彼此依赖。 虽然Java平台提供了大量的程序开发功能,但是它缺少将基础构建块组成一个整体的工具,而将此任务留给了架构师和开发者。尽管可以利用设计模式(比如Factory、Abstract Factory、Builder、Decorator
本文向大家介绍理解php依赖注入和控制反转,包括了理解php依赖注入和控制反转的使用技巧和注意事项,需要的朋友参考一下 要想理解php依赖注入和控制反转两个概念,就必须搞清楚如下的问题: DI——Dependency Injection 依赖注入 IoC——Inversion of Control 控制反转 1、参与者都有谁? 答:一般有三方参与者,一个是某个对象;一个是IoC/DI的
问题内容: 已经发布了几个问题,其中包括有关依赖项注入的特定问题,例如何时使用它以及支持它的框架。然而, 什么是依赖项注入?何时/为什么/不应该使用它? 问题答案: 依赖注入 将依赖传递给其他 对象 或 框架 (依赖注入器)。 依赖注入使测试更加容易。注入可以通过 构造函数 完成。 其构造函数如下: 问题 :如果涉及复杂的任务,例如磁盘访问或网络访问,则 很难 对其进行单元测试。程序员必须进行模拟