这里只是记录简单的使用方法:
一.导入依赖
implementation 'com.google.dagger:dagger:2.25.2'
annotationProcessor 'com.google.dagger:dagger-compiler:2.25.2'
二.具体使用
1.构造函数不含参数
@Inject-@Component-@Inject
a.创建被注入的类
public class Person {
private String name;
private int age;
//构造函数使用Inject注解
@Inject
public Person() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
b.创建一个桥(component),连接需要实例化的类和使用实例化对象的类
package com.example.dragger2.component;
import com.example.dragger2.MainActivity;
import dagger.Component;
//这里使用Component注解 注解连接类
@Component
public interface FactoryActivityComponent {
//MainActivity需要使用实例化对象的地方
void inject(MainActivity activity);
}
c.在需要使用的地方实例化
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
//1.属性使用Inject注解
@Inject
Person mPerson;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//2.使用"桥"连接
DaggerFactoryActivityComponent.create().inject(this);
findViewById(R.id.btn_execute).setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d(TAG, "onClick: " + mPerson.toString());
}
});
}
}
2.构造函数含有参数(步骤如上)
a.构造
public class PersonFactory {
public Person mPerson;
@Inject
public PersonFactory(Person person) {
mPerson = person;
}
}
b.创建连接
c.使用
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
@Inject
PersonFactory mPersonFactory;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DaggerFactoryActivityComponent.create().inject(this);
findViewById(R.id.btn_execute).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d(TAG, "onClick: " + mPersonFactory.hashCode()+"======="+mPersonFactory.hashCode());
}
});
}
}
3.使用带Module的Inject
@Modult-@Component-@Inject
a.创建测试类(模拟不能修改代码的类,如三方库,okhttp等)
public class CantAlterModel {
private String parameter1;
private String parameter2;
public CantAlterModel(String parameter1, String parameter2) {
this.parameter1 = parameter1;
this.parameter2 = parameter2;
}
}
b.创建一个Module 用于提供CantAlterModel对象
//1.类使用Module注解
@Module
public class CantAlterModule {
private String parameter1;
private String parameter2;
public CantAlterModule(String parameter1, String parameter2) {
this.parameter1 = parameter1;
this.parameter2 = parameter2;
}
//2.提供对象的方法使用provides注解
@Provides
CantAlterModel provideCantAlterModel(){
return new CantAlterModel(parameter1,parameter2);
}
}
c.创建"桥"(component),连接
@Component(modules = CantAlterModule.class)
public interface FactoryActivityComponent {
void inject(MainActivity activity);
}
d.使用
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
//1.使用inject注解
@Inject
CantAlterModel mCantAlterModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//2.使用Module初始化
DaggerFactoryActivityComponent.builder().cantAlterModule(new CantAlterModule("我是1","我是2")).build().inject(this);
findViewById(R.id.btn_execute).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d(TAG, "onClick: "+mCantAlterModel.toString());
}
});
}
}
4.Component 依赖(下面使用其他博客的图)
a.使用dependencies
b.使用subComponent