public enum Tyre_Factory implements Factory<Tyre> {
INSTANCE;
@Override
public Tyre get() {
return new Tyre();
}
public static Factory<Tyre> create() {
return INSTANCE;
}
}
然后我们看一下Car_MembersInjector
public final class Car_MembersInjector implements MembersInjector<Car> {
private final Provider<Tyre> typeProvider;
public Car_MembersInjector(Provider<Tyre> typeProvider) {
assert typeProvider != null;
this.typeProvider = typeProvider;
}
public static MembersInjector<Car> create(Provider<Tyre> typeProvider) {
return new Car_MembersInjector(typeProvider);
}
@Override
public void injectMembers(Car instance) {//注意一下这个方法
if (instance == null) {
throw new NullPointerException("Cannot inject members into a null reference");
}
instance.type = typeProvider.get();
}
public static void injectType(Car instance, Provider<Tyre> typeProvider) {
instance.type = typeProvider.get();
}
}
我们来看一下上面定义的Component接口
@Component
public interface CarComponent {
void injectCar(Car car);
}
其实他会生成一个桥接类
public final class DaggerCarComponent implements CarComponent {
private MembersInjector<Car> carMembersInjector;
private DaggerCarComponent(Builder builder) {
assert builder != null;
initialize(builder);
}
public static Builder builder() {
return new Builder();
}
public static CarComponent create() {
return builder().build();
}
@SuppressWarnings("unchecked")
private void initialize(final Builder builder) {
this.carMembersInjector = Car_MembersInjector.create(Tyre_Factory.create());
}
@Override
public void injectCar(Car car) {
carMembersInjector.injectMembers(car);
}
public static final class Builder {
private Builder() {}
public CarComponent build() {
return new DaggerCarComponent(this);
}
}
}
然后我们看看一下调用方法
public Car() {
DaggerCarComponent.builder().build().injectCar(this);
}