Dagger2详解

概述:

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

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

https://blog.csdn.net/BunnyCoffer/article/details/108582624

APT:用法:

https://blog.csdn.net/lvkaixuan/article/details/119784291

3:

我们知道在一个类中,通常会定义其他类型的变量,这个变量就是我们所说的“依赖“。
对一个类的变量进行初始化,有两种方式。第一种,这个类自己进行初始化;第二种,其他外部的类帮你进行初始化。
其中第二种方式,由外部类进行初始化的方式就是我们所说的”依赖注入“。由于他是由外部来控制,因此又叫做”控制反转“。依赖注入和非依赖注入的区别就是,变量初始化工作是由谁来做的。我们常用的工厂、建造者、带参数的构造函数,都是依赖注入。而Dagger2的定位就是提供了用注解的方式来配置依赖的方法。因此Dagger并不是提供依赖注入的能力,而是为依赖注入提供一种更简单的方法

https://blog.csdn.net/m0_69650487/article/details/128817597

用法:

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

public class HttpObject {
}

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

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

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

@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()));
    }

 

posted @ 2023-07-04 07:48  蜗牛攀爬  阅读(146)  评论(0编辑  收藏  举报