Android技术框架——Dagger2

Dagger2 是一个Android依赖注入框架没错依赖注入,学习过spring的同学看到这词,应该是挺熟悉的。当然既然是Android的课题,我们就来聊聊Dagger2 android开发当前非常流行的非MVP模式莫属了,Dagger2的目标便是将MVP中的V P 进一步解耦,达到模块化最大的解耦,使得代码更容易维护。

 

例子:我们需要有个A类,创建时需要BC

A a = new(new B(),new C());

如果我们使用了Dagger2,那就不这么写了,只需要关联住能提供创建BC的地方,然后在需要A的地方写:

@Inject

A a;

最后在这个类初始化进行注入即可!

怎么样,挺容易理解的吧,不过上面的例子并不能很好的显示Dagger2的优势,

 

闲话休叙,我们来直接上代码:(常规写法)

#1 编写一个类:

public class Test3 {

    public Test3() {

    }

}

#2 使用的地方

public class MainActivity extends AppCompatActivity {

    Test3 test3;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        //.....

        test3 = new Test3();

    }

}

 

  • 如果我们改为使用Dagger2的方式的话,则可以写成如下方式:

#1 创建一个类

使用了注解方式,使得Dagger2能找到它。

public class Test3 {

    //这里可以看到加入了注解方式

    @Inject

    public Test3() {

    }

}

#2 新增一个对象:

@Singleton//用这个标注标识是一个连接器

@Component()

public interface MainActivityComponent {

    //这个连接器要注入的对象。这个inject标注的意思是,我后面的参数对象里面有标注为@Inject的属性,这个标注的属性是需要这个连接器注入进来的。

    void inject(MainActivity activity);

}

#3 调用的地方改为:

public class MainActivity extends AppCompatActivity {

    //加入注解,标注这个test3是需要注入的

    @Inject

    Test3 test3;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        //使用组件进行构造,注入

        DaggerMainActivityComponent.builder().build().inject(this);

    }

 

这是最简单的一种使用了。首先我们看到,第一印象是mmp,这个更复杂了好吗,这么写我还不如原先的写好。我只能说确实如此,因为这个是它对的最基础的使用,看起来很笨拙,但是当它在大型项目里面,在依赖更多的情况下,则会发生质的飞跃,会发现它非常好用,并且将你需要传递的参数都隐藏掉,来实现解耦

思路:关键的点是@Component,这个是个连接器,用来连接提供方和使用方的,所以它是桥梁。它使用在组件里面标记使用的Module(标记用到了哪个Module,主要是看使用方需要哪些对象进行构造,然后将它的提供方@module写在这里) 然后我们写入一个void inject(MainActivity activity); 这里后面的参数,就是我们的使用方便了。如此一来,我们在使用的地方,使用类似这种方式(DaggerMainActivityComponent.builder().build().inject(this);)的动作,将使用方类里面的标记 为@Inject的类初始化掉,完成自动初始化的动作。

结构图:

 

更多关于Dagger2的知识可以参考这位博主博客

Dagger系列:

  1. Dagger 2从浅到深(一)
  2. Dagger 2从浅到深(二)
  3. Dagger 2从浅到深(三)
  4. Dagger 2从浅到深(四)
  5. Dagger 2从浅到深(五)
  6. Dagger 2从浅到深(六)
  7. Dagger 2从浅到深(七)
  8. Dagger 2应用于Android的完美扩展库-dagger.android
posted @ 2017-06-22 14:49  lusCodding  阅读(230)  评论(0编辑  收藏  举报