📅  最后修改于: 2023-12-03 15:13:21.281000             🧑  作者: Mango
Dagger 2 是一个依赖注入框架,帮助 Android 开发者更容易地管理应用程序的依赖。@Inject 和 @Component 是 Dagger 2 中最常用的两个注解。在本文中,我们将了解它们的功能和使用。
@Inject 注解用于告诉 Dagger 2 要创建的对象,并且告诉 Dagger 2 该对象的依赖项。这使得我们可以使用依赖注入来实例化对象。
例如,我们有一个类 Person
,其依赖于另一个类 Pet
,我们可以使用 @Inject 注解在 Pet
类的构造函数中:
public class Pet {
@Inject
public Pet() {}
}
现在我们可以在 Person
类中使用 @Inject 注解来告诉 Dagger 2 该怎样实例化 Pet
对象:
public class Person {
private Pet pet;
@Inject
public Person(Pet pet) {
this.pet = pet;
}
}
在上述代码中,我们使用 @Inject 注解告诉 Dagger 2 构造函数需要 Pet
对象作为参数来创建一个 Person
对象。
@Inject 注解还可以用于标记我们要注入的依赖项。例如,如果我们使用 Retrofit
发送网络请求,我们需要一个 OkHttpClient
对象,可以使用 @Inject 注解在 OkHttpClient
对象的构造函数中:
public class MyModule {
@Provides
@Singleton
OkHttpClient provideOkHttpClient() {
return new OkHttpClient();
}
}
public class MyApplication extends Application {
private OkHttpClient okHttpClient;
@Override public void onCreate() {
super.onCreate();
okHttpClient = DaggerMyComponent.create().getOkHttpClient();
}
}
public class MyService {
private final OkHttpClient okHttpClient;
@Inject
public MyService(OkHttpClient okHttpClient) {
this.okHttpClient = okHttpClient;
}
}
在上述代码中,我们使用 @Inject 注解告诉 Dagger 2 MyService
类依赖于 OkHttpClient
对象。
@Component 注解是 Dagger 2 的核心组件之一,用于指定要注入依赖项的类,并在运行时生成注入对象的代码。
首先,我们需要在 Dagger 2 中创建一个组件接口,例如:
@Singleton
@Component(modules = {MyModule.class})
public interface MyComponent {
MyService getMyService();
OkHttpClient getOkHttpClient();
}
在上述代码中,我们使用 @Component 注解创建了一个名为 MyComponent
的组件,并标注为 @Singleton,表示该组件中的对象都应该是单例对象。同时,我们使用 modules
参数告诉 Dagger 2 需要使用哪些模块来提供依赖项。
在组件接口中,我们可以定义一些方法,这些方法返回需要注入依赖项的对象。
接下来,我们可以在需要注入依赖项的地方使用 Dagger 2。例如,我们在 MyApplication
类中需要一个 OkHttpClient
实例,可以按照以下方式注入依赖项:
public class MyApplication extends Application {
private OkHttpClient okHttpClient;
@Override public void onCreate() {
super.onCreate();
MyComponent component = DaggerMyComponent.create();
okHttpClient = component.getOkHttpClient();
}
}
在上述代码中,我们使用 DaggerMyComponent
类(由 Dagger 2 生成)创建了一个 MyComponent
型对象 component
,然后使用 component.getOkHttpClient()
方法获取 OkHttpClient
实例。
在本文中,我们了解了 Dagger 2 中 @Inject 和 @Component 注解的基本用法。@Inject 注解用于告诉 Dagger 2 要创建的对象,并且告诉 Dagger 2 该对象的依赖项。@Component 注解是 Dagger 2 的核心组件之一,用于指定要注入依赖项的类,并在运行时生成注入对象的代码。