Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.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
Java 为什么是匕首2?我们可以手动创建所需的类对象和注入_Java_Android_Dependency Injection_Dagger 2 - Fatal编程技术网

Java 为什么是匕首2?我们可以手动创建所需的类对象和注入

Java 为什么是匕首2?我们可以手动创建所需的类对象和注入,java,android,dependency-injection,dagger-2,Java,Android,Dependency Injection,Dagger 2,我是从谷歌那里知道安卓依赖注入的。没有dagger2,我们可以创建如下对象并使用它(构造函数注入)。使用匕首2有什么意义?设计模式的好处在于归档以下好处 易于测试 代码的可重用性 易于重构 但我的问题是,没有匕首-2,我们也可以做到这一点。那我们要用匕首2做什么 没有匕首2 引擎 public class Engine { public Engine() { } } public class Engine { @Inject public

我是从谷歌那里知道安卓依赖注入的。没有dagger2,我们可以创建如下对象并使用它(构造函数注入)。使用匕首2有什么意义?设计模式的好处在于归档以下好处

  • 易于测试
  • 代码的可重用性
  • 易于重构
  • 但我的问题是,没有匕首-2,我们也可以做到这一点。那我们要用匕首2做什么

    没有匕首2

    引擎

    public class Engine {
    
        public Engine()
        {
    
        }
    }
    
    public class Engine {
        
        @Inject
        public Engine()
        {
    
        }
    }
    
    轮子

    public class Wheels {
    
        public Wheels()
        {
    
        }
    }
    
    public class Wheels {
    
        @Inject
        public Wheels()
        {
    
        }
    }
    
    汽车

    主课

    用匕首-2

    引擎

    public class Engine {
    
        public Engine()
        {
    
        }
    }
    
    public class Engine {
        
        @Inject
        public Engine()
        {
    
        }
    }
    
    轮子

    public class Wheels {
    
        public Wheels()
        {
    
        }
    }
    
    public class Wheels {
    
        @Inject
        public Wheels()
        {
    
        }
    }
    
    汽车

    汽车零部件

    @component
    public interface CarComponent{
       Car getCar();
    }
    
    主课


    从你自己的例子来看,这应该是非常明显的:

     @Override
     protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        car=new Car(new Engine(),new Wheels());
    
        car.drive();
    }
    
    因此,在这里,每次你想要得到一辆汽车的保养时,你必须创建一个新的
    引擎实例
    ,以及一个新的
    车轮实例
    。因此,让我们考虑一下:

    如果汽车现在需要一个新部件作为参数,会发生什么

    您必须将此依赖项添加到汽车对象的每个单独创建中

    car=new Car(new Engine(),new Wheels(), new Foo()); <-- you'll be doing this throughout your entire project.
    

    因此,在创建所需的对象之前,您将不得不创建大量依赖项,并且您将在项目中的任何地方、每一次都这样做,这就是使用依赖项注入/反转框架的意义所在(这与dagger无关,这是一般性的事情)-帮助您管理您的依赖关系。

    从您自己的示例来看,它应该非常明显:

     @Override
     protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        car=new Car(new Engine(),new Wheels());
    
        car.drive();
    }
    
    因此,在这里,每次你想要得到一辆汽车的保养时,你必须创建一个新的
    引擎实例
    ,以及一个新的
    车轮实例
    。因此,让我们考虑一下:

    如果汽车现在需要一个新部件作为参数,会发生什么

    您必须将此依赖项添加到汽车对象的每个单独创建中

    car=new Car(new Engine(),new Wheels(), new Foo()); <-- you'll be doing this throughout your entire project.
    

    因此,在创建所需的对象之前,您将不得不创建大量依赖项,并且您将在项目中的任何地方、每一次都这样做,这就是使用依赖项注入/反转框架的意义所在(这与dagger无关,这是一般性的事情)-帮助您管理依赖关系。

    我明白您的意思。但是在上面的
    中没有dagger-2
    Car方法。我确实喜欢。仅获取构造函数中的
    车轮
    发动机
    实例
    公共汽车(发动机、车轮)
    。我在问我们可以手动注入对象实例为什么需要Dagger-2?@Prasath当然,Dagger(或任何其他依赖注入框架)不会做你自己做不到的事情。从技术上讲,没有一个库会做你自己做不到的事情,库会让你更容易做一些事情。使用依赖项注入框架只会使它更容易,但这取决于您的项目。你什么都不用用我明白你的意思了。但是在上面的
    中没有dagger-2
    Car方法。我确实喜欢。仅获取构造函数中的
    车轮
    发动机
    实例
    公共汽车(发动机、车轮)
    。我在问我们可以手动注入对象实例为什么需要Dagger-2?@Prasath当然,Dagger(或任何其他依赖注入框架)不会做你自己做不到的事情。从技术上讲,没有一个库会做你自己做不到的事情,库会让你更容易做一些事情。使用依赖项注入框架只会使它更容易,但这取决于您的项目。你什么都不用用