Java 为什么是匕首2?我们可以手动创建所需的类对象和注入
我是从谷歌那里知道安卓依赖注入的。没有dagger2,我们可以创建如下对象并使用它(构造函数注入)。使用匕首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
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(或任何其他依赖注入框架)不会做你自己做不到的事情。从技术上讲,没有一个库会做你自己做不到的事情,库会让你更容易做一些事情。使用依赖项注入框架只会使它更容易,但这取决于您的项目。你什么都不用用