依赖注入与Dagger2使用入门
发布时间:2020-12-13 21:59:48 所属栏目:百科 来源:网络整理
导读:依赖注入 在开始之前,我们先要搞懂什么是依赖注入。 第一个版本。 /** * Created by REXZOU on 2015/11/21. */ public class Motor { public void addGas () { }} /** * Created by REXZOU on 2015/11/21. */ public class Car { private final Motor mMoto
依赖注入在开始之前,我们先要搞懂什么是依赖注入。 第一个版本。 /** * Created by REXZOU on 2015/11/21. */
public class Motor {
public void addGas() {
}
}
/** * Created by REXZOU on 2015/11/21. */
public class Car {
private final Motor mMotor;
public Car() {
mMotor = new Motor();
}
}
我们用下图表示两者关系 /** * Created by REXZOU on 2015/11/21. */
public class Car {
private final Motor mMotor;
public Car(Motor motor) {
mMotor = motor;
}
}
现在不一样,我们的发动机不是和汽车一起制造的,而变成组装了。是在外面造好之后,再安装进来,他们逻辑关系图就成了以下这样: 这样,当我们改变发动机的参数或是类型时,我们都不需要去修改汽车Car这个类。 这个问题解决了,新的问题又来了,谁来负责创建Motor。 这个时候,需要Dagger出场了。 Dagger的配置为了使用Dagger需要在dependency中加入 provided 'org.glassfish:javax.annotation:10.0-b28'
apt 'com.google.dagger:dagger-compiler:2.0.2'
compile 'com.google.dagger:dagger:2.0.2'
对于car这个类,我们修改为: /** * Created by REXZOU on 2015/11/21. */
public class Car {
private Motor mMotor;
@Inject
public Car(Motor motor) {
mMotor = motor;
}
}
@Inject,表示这里需要从外面赋值。 /** * Created by REXZOU on 2015/11/27. */
@Singleton
@Component(modules = {CarFactory.class})
public interface CarComponent {
Car provideCar();
}
/** @Module
public class CarFactory {
@Provides @Singleton
Car makeCar() {
return new Car(new Motor());
}
@Provides @Singleton
Motor makeMotor() {
return new Motor();
}
}
/** * Created by REXZOU on 2015/11/21. */
public class Motor {
public void addGas() {
}
}
最终使用方式: CarComponent component = DaggerCarComponent.builder().carFactory(new CarFactory()).build();
Car car = component.provideCar();
也就是我们看到,我们没有创建car本身,一切都是Dagger在背后默默实现的。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容