Spring 为什么春天’;s DI/IoC认为比常规OO更解耦?
我试图从一个普通的OO背景中学习spring 在常规OO中,如果您想要解耦依赖项。你可以自己做Spring 为什么春天’;s DI/IoC认为比常规OO更解耦?,spring,oop,dependency-injection,inversion-of-control,Spring,Oop,Dependency Injection,Inversion Of Control,我试图从一个普通的OO背景中学习spring 在常规OO中,如果您想要解耦依赖项。你可以自己做 Car car = CarFactory.getCar(); 在那里你可以有大汽车和小汽车 在spring中,依赖项通过 @Autowire BigCar car; 或者通过XML进行配置 问题是,如何更加解耦?在所有3种情况下,您 在工厂更改1行代码 更改@Autowire下面的1行代码 更改1行XML代码 依赖项注入更加解耦,因为想要引用汽车的对象(在本例中)不需要包含检索或创建汽车的任何代码
Car car = CarFactory.getCar();
在那里你可以有大汽车和小汽车
在spring中,依赖项通过
@Autowire
BigCar car;
或者通过XML进行配置
问题是,如何更加解耦?在所有3种情况下,您
依赖项注入更加解耦,因为想要引用汽车的对象(在本例中)不需要包含检索或创建汽车的任何代码。在依赖项注入的情况下,依赖项注入容器创建bean,建立关系并满足bean之间的依赖项。
bean的创建与使用bean的代码完全解耦;在Spring的情况下,它可以以Java配置或XML的形式定义。
另一个优点是依赖项注入建立了一种机制来建立关系并满足bean之间的依赖关系。依赖项注入更加解耦,因为想要引用Car的对象(在本例中)不需要包含检索或创建Car的任何代码。在依赖项注入的情况下,依赖项注入容器创建bean,建立关系并满足bean之间的依赖项。
bean的创建与使用bean的代码完全解耦;在Spring的情况下,它可以以Java配置或XML的形式定义。
另一个优点是依赖注入建立了一种机制来建立关系并满足bean之间的依赖关系。在spring中有一个称为控制反转(InversionofControl,IoC)的概念。 基本上就是说 控制反转是软件工程中的一个原理,通过该原理,对象或程序部分的控制被转移到容器或框架中 你可以在这里查一下
因此,使用spring,我们并不是在需要的地方创建对象,而是通过通知应该在哪里创建,将这一责任委托给spring。在上述示例中,使用@Autowired。这显然比OO设计中的松耦合。在春季,有一个称为控制反转(IoC)的概念。 基本上就是说 控制反转是软件工程中的一个原理,通过该原理,对象或程序部分的控制被转移到容器或框架中 你可以在这里查一下
因此,使用spring,我们并不是在需要的地方创建对象,而是通过通知应该在哪里创建,将这一责任委托给spring。在上述示例中,使用@Autowired。这显然比OO设计中的松耦合。您将
@Autowire
aCar
而不是特定类型。是的,您可以在工厂中更改一行,但这不是依赖注入。类本身现在需要知道从何处获取(您的工厂)的依赖项,该依赖项将类与工厂和其中的逻辑相耦合。解耦意味着它使用汽车
,如何获得并不重要。@Autowire汽车将如何工作?如果您有两个子类型,Spring将不知道实例化哪个。您将创建一个实例,这也是您的'CarFactory.getCar();`他正在做什么。否则,您可以始终使用限定符获取特定实例。您将@Autowire
aCar
而不是特定类型。是的,您可以在工厂中更改一行,但这不是依赖注入。类本身现在需要知道从何处获取(您的工厂)的依赖项,该依赖项将类与工厂和其中的逻辑相耦合。解耦意味着它使用汽车
,如何获得并不重要。@Autowire汽车将如何工作?如果您有两个子类型,Spring将不知道实例化哪个。您将创建一个实例,这也是您的'CarFactory.getCar();`他正在做什么。否则,您可以始终使用限定符来获取特定实例。