Dagger2详解

发布时间 2023-07-04 07:53:50作者: 蜗牛攀爬

概述:

1:Dagger2是编译时完成注入,没有采用反射,采用的是APT技术。

2:当我们需要对一段代码进行拦截修改的时候,我们有很多方案,最常见的是通过反射。但是反射是在运行时的工作,对性能有很大的影响,所以提出了APT技术,该技术可以在编译期对代码进行拦截,并进行修改,生成新的可执行的类。

用法:

1:定义一个需要使用的类:

public class HttpObject {
}

2:定义一个Module,生成HttpObject的实例:

@Module
public class HttpModule {
    @Provides
    public HttpObject provideHttpObject() {
        return new HttpObject();
    }
}

3:定义一个Component,包裹上述的Component:

@Component(modules = {HttpModule.class, DatabaseModule.class})
public interface MyComponent {
    void injectMainActivity(MainActivity mainActivity);
}

4:使用:

public class MainActivity extends AppCompatActivity {
    @Inject
    HttpObject httpObject;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);

        DaggerMyComponent.create().injectMainActivity(this);

        Log.i("test--->", String.valueOf(httpObject.hashCode()));
    }