- Dagger2的优点
* 没有使用反射,图的验证、配置和预先设置都在编译的时候执行
* 容易调试,完全具体地调用提供和创建的堆栈
* 更高的性能,谷歌声称他们提高了13%的处理性能
* 代码混淆,使用派遣方法,就如同自己写的代码一样
第一步:在project/build.gradle 文件下添加 classpath ‘com.neenbedankt.gradle.plugins:android-apt:1.8’
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.0'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
第二步:在app/build.gradle 文件下添加 apply plugin: ‘com.neenbedankt.android-apt’ ,compile ‘com.google.dagger:dagger:2.2’ 和apt ‘com.google.dagger:dagger-compiler:2.2’,provided ‘org.glassfish:javax.annotation:10.0-b28’,同步一下
apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'
dependencies {
compile 'com.google.dagger:dagger:2.2'
apt 'com.google.dagger:dagger-compiler:2.2'
provided 'org.glassfish:javax.annotation:10.0-b28'
....
第三步:写一个要注入的类
/**
* Created by Administrator on 2016/12/6.
*/
public class User {
public String name ;
public int age ;
public User(String name, int age) {
this.name = name;
this.age = age;
}
}
第四步:在MainActivity中添加注解
public class MainActivity extends AppCompatActivity {
@Inject
User user ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
第五步:写一个Moudle类,像仓库。使用@Moudle修饰类,使用@Provides修饰提供对象的方法。
import dagger.Module;
import dagger.Provides;
/**
* Created by Administrator on 2016/12/6.
*/
@Module
public class MainActivityModule {
@Provides
public User getUser(){
return new User("zhangsan",19);
}
}
第六步:写一个用@Component注解的接口,是连接@Inject和@Module的桥梁。
import dagger.Component;
/**
* Created by Administrator on 2016/12/6.
*/
@Component(modules = MainActivityModule.class)
public interface MainActivityComponent {
void inject(MainActivity mainActivity);
}
第七步:Rebuild Project一下,就可以调用。出现实现接口的类DaggerMainActivityComponent。
public class MainActivity extends AppCompatActivity {
@Inject
User user ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView viewById = (TextView) findViewById(R.id.tv);
MainActivityComponent component =
DaggerMainActivityComponent.builder().mainActivityModule(new MainActivityModule()).build();
component.inject(this);
viewById.setText("姓名:"+user.name+" , 年龄"+user.age);
}
}