添加依赖
//dagger2
implementation 'com.google.dagger:dagger:2.30.1'
annotationProcessor 'com.google.dagger:dagger-compiler:2.30.1'
1.在具有构造方法的对象上使用
1:在构造方法上使用@Inject注解
2:创建ioc容器组件component,并使用@component
3:在需要对象的地方声明并使用@Inject
4:手动进行注入,使用自动生成的component实现类进行注入
1.第一步
package com.cainiao5.myapplication.di;
import javax.inject.Inject;
public class User {
//1.在构造方法上使用@Inject
//作用:使用了@Inject后,annotationProcessor会识别到这个注解然后对这个类进行一些处理
//告知dagger可以通过构造方法来创建和获取到user的实例
@Inject
public User() {
}
}
2.第二步
package com.cainiao5.myapplication.di;
import com.cainiao5.myapplication.MainActivity;
import dagger.Component;
//2.创造注入容器
@Component
public interface ApplicationComponent {
void inject(MainActivity mainActivity);
}
3.第三步,第四步
package com.cainiao5.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import com.cainiao5.myapplication.di.DaggerApplicationComponent;
import com.cainiao5.myapplication.di.User;
import javax.inject.Inject;
public class MainActivity extends AppCompatActivity {
//3.声明注入
@Inject
User user;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//4.执行注入动作
//DaggerApplicationComponent 是第二步的容器的实现类
DaggerApplicationComponent.create().inject(this);
System.out.println("user=" + user);
}
}
结果
2022-11-10 16:11:27.826 8831-8831/com.cainiao5.myapplication I/System.out: user=com.cainiao5.myapplication.di.User@b6b1c7
说明已经完成注入
2.在没有构造方法的对象上进行注入(由第三方框架提供的eg:R retrofit)
1.创建module 使用@provide获取retrofit实例
2.在component上装载module
3.使用@Inject声明对象
4.使用自动生成的component实现类去手动注入
1.第一步:创建module 使用@provide获取retrofit实例
package com.cainiao5.myapplication.di;
import dagger.Module;
import dagger.Provides;
import retrofit2.Retrofit;
//因为一些第三方类,无法在构造方法上加@Inject注解,
// 或者一些类的初始化方式不是通过构造方法实现的,所以需要一个关联关系
@Module
public class NetModule {
//第二种可以告知dagger,可以通过该方法来获取到对象的实例
@Provides
public Retrofit provideRetrofit(){
return new Retrofit
.Builder()
.baseUrl("http://www.google.com")
.build();
}
}
2.第二步:把module装载到component上
package com.cainiao5.myapplication.di;
import com.cainiao5.myapplication.MainActivity;
import dagger.Component;
//2.创造注入容器
@Component(modules = {NetModule.class})
public interface ApplicationComponent {
void inject(MainActivity mainActivity);
}
3.第三步:第四步,声明和手动注入
package com.cainiao5.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import com.cainiao5.myapplication.di.DaggerApplicationComponent;
import com.cainiao5.myapplication.di.User;
import javax.inject.Inject;
import retrofit2.Retrofit;
public class MainActivity extends AppCompatActivity {
//3.声明注入
@Inject
User user;
@Inject
Retrofit retrofit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//4.执行注入动作
//DaggerApplicationComponent 是第二步的容器的实现类
DaggerApplicationComponent.create().inject(this);
System.out.println("user=" + user);
System.out.println("retrofit = " + retrofit);
}
}