【发布时间】:2021-04-04 07:55:59
【问题描述】:
我从 https://developer.android.com/training/dependency-injection 了解到 Android 依赖注入。事情是没有 dagger2 我们可以像下面这样创建对象并使用它(构造函数注入)。使用 Dagger2 有什么意义?设计模式的好处存档以下好处
- 易于测试
- 代码的可重用性
- 易于重构
但我的问题是没有 Dagger-2 我们也可以做到这一点。那我们应该用 Dagger2 做什么呢?
没有 Dagger2
引擎
public class Engine {
public Engine()
{
}
}
车轮
public class Wheels {
public Wheels()
{
}
}
汽车
public class Car {
private static final String TAG = "Car";
private Engine engine;
private Wheels wheels;
public Car(Engine engine,Wheels wheels)
{
this.engine=engine;
this.wheels=wheels;
}
public void drive()
{
Log.d(TAG, "driving");
}
}
MainActivity.class
public class MainActivity extends AppCompatActivity {
private Car car;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Engine engine=new Engine();
// Wheels wheels=new Wheels();
car=new Car(new Engine(),new Wheels());
car.drive();
}
}
使用 Dagger-2
引擎
public class Engine {
@Inject
public Engine()
{
}
}
车轮
public class Wheels {
@Inject
public Wheels()
{
}
}
汽车
public class Car {
private static final String TAG = "Car";
private Engine engine;
private Wheels wheels;
@Inject
public Car(Engine engine,Wheels wheels)
{
this.engine=engine;
this.wheels=wheels;
}
public void drive()
{
Log.d(TAG, "driving");
}
}
汽车组件
@component
public interface CarComponent{
Car getCar();
}
MainActivity.class
public class MainActivity extends AppCompatActivity {
private Car car;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
CarComponent carComponent=DaggerCarComponent.create();
carComponent.getCar();
car.drive();
}
}
【问题讨论】:
标签: java android dependency-injection dagger-2