Dagger2的简单使用

来源:互联网 发布:java list 对象去重 编辑:程序博客网 时间:2024/05/22 15:55
  • 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. */@Modulepublic 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);    }}
0 0
原创粉丝点击