dagger 2 基础

dagger 2是android下的IOC框架,类似java服务端的spring,但功能上远没有其强大。个人理解不管是APP还是服务端依赖注入的本质都是一样的,用于解耦某个服务的定义和实现。我自己给出下面这个简单的例子:

1、在android studio中增加配置如下:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath ‘com.android.tools.build:gradle:1.5.0‘,
        ‘com.neenbedankt.gradle.plugins:android-apt:1.4+‘
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
apply plugin: ‘android-apt‘
//此处要注意dagger的版本号
dependencies {
    compile fileTree(dir: ‘libs‘, include: [‘*.jar‘])
    testCompile ‘junit:junit:4.12‘
    compile ‘com.android.support:appcompat-v7:23.2.0‘
    compile ‘com.android.support:design:23.2.0‘
    compile ‘com.google.dagger:dagger:2.0‘
    apt ‘com.google.dagger:dagger-compiler:2.0‘
    provided ‘org.glassfish:javax.annotation:10.0-b28‘
}

2、定义服务的实现如下:

public interface IStoreInfo {
    void storeInfo(String info);
}
public class StoreInfoInDb implements IStoreInfo{
    @Override
    public void storeInfo(String info) {
        System.out.println("In DB:" + info);
    }
}

public class StoreInfoInFile implements IStoreInfo{

    @Override
    public void storeInfo(String info) {
        System.out.println("In File:" + info);
    }
}

3、定义module和component

@Module
public class InfoServiceModule {

    @Provides
    @Singleton
    IStoreInfo setIStoreInfo(){
        return new StoreInfoInFile();
    }
}
@Singleton
@Component(modules = InfoServiceModule.class)
public interface InfoServiceComponent {
    void inject(InfoService service);
    IStoreInfo setIStoreInfo();
}

备注:这里其实相当于spring XML定义的部分,只是这里是采用硬编码的形式绑定接口的定义和实现

4、使用:

public class InfoService {

    @Inject
    public IStoreInfo info;

    public void initService(){
        InfoServiceComponent component = DaggerInfoServiceComponent.builder().infoServiceModule(new InfoServiceModule()).build();
        component.inject(this);
    }

    public void infoHandler(String input){
        info.storeInfo(input);
    }
}
时间: 2024-10-19 17:03:57

dagger 2 基础的相关文章

Dagger学习 -- 基础概念

目标 了解 Dagger 基本概念 官方定义 Google 对 Dagger 的定义如下: Dagger is a fully static, compile-time dependency injection framework for both Java and Android. It is an adaptation of an earlier version created by Square and now maintained by Google. Dagger 是一个为 Java

Dagger2使用攻略

Dagger2使用攻略 Dagger 2 是 Square 的 Dagger 分支,是一种依赖注入框架.眼下由 Google 接手进行开发,Dagger2是使用代码自己主动生成和手写代码来实现依赖注入.据说在 Dagger 的基础上效率又提升了13%.而且相同功能强大. 1.Gradle配置 (1)须要配置apt 插件:(在project根文件夹build.gradle文件里加入例如以下代码) dependencies { ... classpath 'com.neenbedankt.gradl

最美应用-从Android研发工程师的角度之[厨房故事]

最美应用-从Android研发工程师的角度之厨房故事 @author ASCE1885的 Github 简书 微博 CSDN 本文我们将如约来分析下厨房故事这款德国app的技术堆栈.由于国内和国外网络环境,技术环境的不同,我们将会看到它和最美时光很不一样的东西.我们需要思考的是如果是自己开发一款全新的app时,会如何选择属于自己的技术堆栈呢? 使用的开源函数库 1. 底层库集合Bolts-Android Bolts是一个由Parse和Facebook设计的面向iOS和Android的底层库集合,

java web 开发三剑客 -------电子书

Internet,人们通常称为因特网,是当今世界上覆盖面最大和应用最广泛的网络.根据英语构词法,Internet是Inter + net,Inter-作为前缀在英语中表示“在一起,交互”,由此可知Internet的目的是让各个net交互.所以,Internet实质上是将世界上各个国家.各个网络运营商的多个网络相互连接构成的一个全球范围内的统一网,使各个网络之间能够相互到达.各个国家和运营商构建网络采用的底层技术和实现可能各不相同,但只要采用统一的上层协议(TCP/IP)就可以通过Internet

机器学习 —— 基础整理(六):线性判别函数——感知器、松弛算法、Ho-Kashyap算法

本文简单整理了以下内容: (一)线性判别函数与广义线性判别函数 (二)感知器 (三)松弛算法 (四)Ho-Kashyap算法 (一)线性判别函数与广义线性判别函数 一.线性判别函数 这篇总结继续关注分类问题.假设判别函数(Discriminant function)的参数形式已知,用训练的方法直接根据样本估计判别函数的参数.线性判别函数的形式为: $$g(\textbf x)=\textbf w^{\top}\textbf x+w_0$$ $\textbf x\in \mathbb R^d$ 是

JAVA基础知识整理 常用框架

JAVA反射---相关资料: 1.Java反射机制可以让我们在编译期(Compile Time)之外的运行期(Runtime)检查类,接口,变量以及方法的信息 2.反射还可以让我们在运行期实例化对象,调用方法,通过调用get/set方法获取变量的值. 参考框架:Butterfly Persistence 构建 这里搜集了用来构建应用程序的工具. Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建.Maven优于Apache Ant.后者采用了一种

【简译】jQuery对象的奥秘:基础介绍

本文翻译自此文章 你有没有遇到过类似$(".cta").click(function(){})这样的JavaScript代码并且在想“$('#x')是什么”?如果这些对你想天书一样,请往下读.如果你认为这些代码不可能是真的,请浏览一些jQuery例子,他们都是这种结构. 这篇文章覆盖了像下面一样吓人的代码片段中涉及的关键概念.我们以一个长例子开始,这个长例子是基于一个让一个正方形运动的简单例子(a simple example of animating a square).你可能不需要

python【第十四篇】HTML基础

什么是HTML? HTML(HyperText MarkUp Language)超文本标记语言,通过使用标记来描述文档结构和表现形式的一种语言,由浏览器进行解析,然后把结果显示在网页上,通俗的讲它就是服务器发送的字符串到浏览器,通过浏览器能解析的规则用HTML来描述, 它是网页构成的基础,你见到的所有网页都离不开HTML,所以学习HTML是基础中的基础 HTML语言是一种标记语言,不需要编译,直接由浏览器执行 HTML文件是一个文本文件,包含了一些HTML元素, HTML文件是一个文本文件,包含

Android中的依赖注入:Dagger函数库的使用(一)

--欢迎转载,请注明出处 http://blog.csdn.net/asce1885 ,未经本人同意请勿用于商业用途,谢谢-- 原文链接:http://antonioleiva.com/dependency-injection-android-dagger-part-1/ 本文Gitbooks链接:http://asce1885.gitbooks.io/android-rd-senior-advanced/content/androidzhong_de_yi_lai_zhu_ru_ff1a_da