Dagger2是一个依赖注入框架,首先添加gradle依赖:
project的build.gradle添加:
dependencies {
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' //添加apt命令
}
app的build.gradle添加:
// 添加其他插件
apply plugin: 'com.neenbedankt.android-apt'//添加apt命令
dependencies {
apt 'com.google.dagger:dagger-compiler:2.0.2' //指定注解处理器
compile 'com.google.dagger:dagger:2.0.2' //dagger公用api
provided 'org.glassfish:javax.annotation:10.0-b28' //添加android缺失的部分javax注解
使用流程
需要注入的类
MainActivity
:public class MainActivity extends AppCompatActivity { private TextView textView; @Inject//1.需要被注入的对象上加@Inject注解 People people; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); DaggerPeopleComponent.create().inject(this);//2.通过dagger自动生成的DaggerPeopleComponent将自身注入 textView = (TextView) findViewById(R.id.text_view); textView.setText(people.name+"\n"+people.age);//3.完成以上步骤就可以直接使用people对象了。 } }
定义module类
PeopleModule
@Module//1.类上面添加@Module注解 public class PeopleModule { @Provides//2. 方法前添加@Provides注解 public People providePeople() { return new Student("jack", 17);//3.方法返回的就是要被注入的对象 } }
定义component接口
PelpleComponent
@Component(modules = {PeopleModule.class})//1.提供注入方法的module public interface PeopleComponent {//2.component都是定义成接口,dagger会自动生成实现类,实现类的命名规则为:Dagger+接口名( 所以这里是DaggerPeopleComponent) void inject(MainActivity container);//3.需要注入的Container }
最后如果Dagger没有自动生成component而编译报错,一般情况下rebuilt一下就可以解决了。