Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 为什么春天’;s DI/IoC认为比常规OO更解耦?_Spring_Oop_Dependency Injection_Inversion Of Control - Fatal编程技术网

Spring 为什么春天’;s DI/IoC认为比常规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代码 依赖项注入更加解耦,因为想要引用汽车的对象(在本例中)不需要包含检索或创建汽车的任何代码

我试图从一个普通的OO背景中学习spring

在常规OO中,如果您想要解耦依赖项。你可以自己做

Car car = CarFactory.getCar();
在那里你可以有大汽车和小汽车

在spring中,依赖项通过

@Autowire
BigCar car;
或者通过XML进行配置

问题是,如何更加解耦?在所有3种情况下,您

  • 在工厂更改1行代码
  • 更改@Autowire下面的1行代码
  • 更改1行XML代码

  • 依赖项注入更加解耦,因为想要引用汽车的对象(在本例中)不需要包含检索或创建汽车的任何代码。在依赖项注入的情况下,依赖项注入容器创建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
    a
    Car
    而不是特定类型。是的,您可以在工厂中更改一行,但这不是依赖注入。类本身现在需要知道从何处获取(您的工厂)的依赖项,该依赖项将类与工厂和其中的逻辑相耦合。解耦意味着它使用
    汽车
    ,如何获得并不重要。@Autowire汽车将如何工作?如果您有两个子类型,Spring将不知道实例化哪个。您将创建一个实例,这也是您的'CarFactory.getCar();`他正在做什么。否则,您可以始终使用限定符获取特定实例。您将
    @Autowire
    a
    Car
    而不是特定类型。是的,您可以在工厂中更改一行,但这不是依赖注入。类本身现在需要知道从何处获取(您的工厂)的依赖项,该依赖项将类与工厂和其中的逻辑相耦合。解耦意味着它使用
    汽车
    ,如何获得并不重要。@Autowire汽车将如何工作?如果您有两个子类型,Spring将不知道实例化哪个。您将创建一个实例,这也是您的'CarFactory.getCar();`他正在做什么。否则,您可以始终使用限定符来获取特定实例。