
0、配置环境
build.gradle(Module:app)
android {
defaultConfig {
..........
javaCompileOptions { annotationProcessorOptions { includeCompileClasspath = true } }
}
}
dependencies {
// Annotation
api 'com.google.dagger:dagger:2.0.2'
api 'com.google.dagger:dagger-compiler:2.0.2'
compileOnly 'org.glassfish:javax.annotation:10.0-b28'
}
1、创建一个对象类
public class PeopleBean {
public PeopleBean() {
}
public void playGame() {
Log.e("ATU", "玩游戏");
}
}
2、创建一个Module
//第一步 添加@Module 注解
@Module
public class PeopleMainModule {
//第二步 使用Provider 注解 实例化对象
@Provides
PeopleBean providerA() {
return new PeopleBean();
}
}
3、创建一个Component接口
//第一步 添加@Component
//第二步 添加module
@Component(modules = {PeopleMainModule.class})
public interface PeopleMainComponent {
//第三步 写一个方法 绑定Activity /Fragment
void inject(MainActivity activity);
}
注意:Rebuild后build文件夹会生成一个DaggerPeopleMainComponent类(Dagger+你的Component接口名,位置和你的Component接口在一个包目录下)
4、在MainActivity使用
// 使用Inject 注解,获取到PeopleBean 对象的实例
@Inject
PeopleBean peopleBean;
//添加依赖关系
DaggerPeopleMainComponent.builder().build().inject(this);
//调用PeopleBean对象的方法
peopleBean.playGame();
当PeopleBean多了一个构造参数
public class PeopleBean {
private TwoBean twoBean;
public PeopleBean(TwoBean twoBean) {
this.twoBean = twoBean;
}
public void playGame() {
Log.e("ATU", twoBean.getName()+"玩游戏");
}
}
public class TwoBean {
private String name;
public TwoBean(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
只需将Moudle改为:
//第一步 添加@Module 注解
@Module
public class PeopleMainModule {
//第二步 使用Provider 注解 实例化对象
@Provides
PeopleBean providerA(TwoBean twoBean) {
return new PeopleBean(twoBean);
}
@Provides
TwoBean providerB(){//提供给上面的providerA方法参数
return new TwoBean("小陈");
}
}
当一个有类的构造方法使用@Inject时,使用该类时,同样使用 @Inject
public class HasInjectBean {
private PeopleBean peopleBean;
@Inject
public HasInjectBean(PeopleBean peopleBean) {
this.peopleBean = peopleBean;
}
public void getL(){
Log.e("ATU","我是有@Inject的bean类");
peopleBean.playGame();
}
}
// 使用Inject 注解,获取到HasInjectBean对象的实例
@Inject
HasInjectBean hasInjectBean;
//添加依赖关系
DaggerPeopleMainComponent.builder().build().inject(this);
//调用HasInjectBean 对象的方法
hasInjectBean.getL();
网友评论