• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android项目使用Dagger2进行依赖注入

Android项目使用Dagger2进行依赖注入

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android dagger2,android dagger2使用,android mvp dagger2,dagger2依赖,dagger2等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android项目使用Dagger2进行依赖注入


原文链接:http://code.tutsplus.com/tutorials/dependency-injection-with-dagger-2-on-android–cms-23345

依赖注入是一种软件设计模式,致力于应用松耦合,可扩展性和可维护性。本教程中,将学到如何使用Dagger2进行依赖注入。

介绍

当一个对象需要或依靠其他对象处理工作时,这就是一个依赖关系。依赖关系可以通过让依赖对象创建被依赖者或者使用工厂方法创建一个被依赖者来解决。在依赖注入的情况下,然而,向类提供的依赖需要避免类来创建它们。这样你创建的软件就是松耦合和高可维护的。

本教程使用Dagger的最新版,Dagger 2。在写作期间,Dagger 2还未正式发布,处于pre-alpha阶段。然而,它是可用和稳定的。你可以访问Dagger on GitHub得到项目的新闻和正式版的发布日期。

前置条件

你需要在开发机上安装最新版的Android Studio,可以从Android开发者网站下载。

Dagger 2 API

Dagger 2提供了一些特殊的注解:

@Module用于类,该类的方法提供依赖。 @Provides用于@Module注解的类中的方法 @inject请求依赖(用在构造函数,域或方法) @Component是模块和注入之间的接口

这些就是即将使用Dagger 2进行依赖注入所需要了解的重要注解。我将在一个简单Android应用中向你展示如何使用它们。

Dagger 2工作流程

为了正确使用Dagger 2,你需要遵守以下步骤:

识别依赖对象和它的依赖。 创建带@Module注解的类,对每个返回依赖的方法使用@Provides注解。 在依赖对象上使用@Inject注解来请求依赖。 使用@Componet注解创建一个接口并增加第二步中创建的带@Module注解的类。 创建一个@Component接口的对象来实例化自带依赖的依赖对象。

依赖分析从运行时转换到编译时。这意味着在开发阶段就可以知道可能的问题,而不像其他的库,例如Guice。在开始使用Dagger 2库之前,你需要安装Android Stuido来访问生成的类。

Android Studio环境建立

Step 1

使用Android Studio创建一个新的应用并命名。我的工程命名为TutsplusDagger。
\

Step 2

设置项目的最小SDK版本为API 10来适配更多机型。
\

Step 3

创建的activity选择空布局。对于本教程,不需要特殊布局。
\

Step 4

命名activity为Main
Activity并点击Finish按钮。
\

工程创建后,你需要对gradle文件进行一些修改。让我们在下一步中做这些改动。

配置Gradle设置。

Step 1

我们需要修改工程的build.gradle文件如下:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.0'
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
    }
}

allprojects {
    repositories {
        mavenCentral()
        maven{
            url 'https://oss.sonatype.org/content/repositories/snapshots/'
        }
    }
}

让我们看一下做了哪些修改:
- dependencies:这部分,我增加了一个插件,该插件将用于访问Dagger生成的文件。如果不加入,访问这些新类时将看到错误。
- allprojects:这个修改是因为我们使用的库当前处于pre-alpha阶段,而且这是使用Maven来访问该库的唯一可用地址。也可以从Sonatype下载Dagger和Dagger编译器库,但本教程是基于Maven仓库创建的。

####Step 2
打开工程app文件夹中的build.gradle文件,修改如下:

apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'

android {
 compileSdkVersion 21
 buildToolsVersion "21.1.2"

 defaultConfig {
     applicationId "com.androidheroes.tutsplusdagger"
     minSdkVersion 10
     targetSdkVersion 21
     versionCode 1
     versionName "1.0"
 }
 buildTypes {
     release {
         minifyEnabled false
         proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
     }
 }
}

dependencies {
 compile fileTree(dir: 'libs', include: ['*.jar'])
 compile 'com.android.support:appcompat-v7:21.0.3'

 compile 'com.google.dagger:dagger:2.0-SNAPSHOT'
 apt 'com.google.dagger:dagger-compiler:2.0-SNAPSHOT'
 provided 'org.glassfish:javax.annotation:10.0-b28'
}

在文件开头,我应用了新的插件。务必将新插件(com.neenbedankt.android-apt)放到Android插件之后。如果不这样做,在同步工程的gradle文件时将显示错误。

在dependencies中添加了如下依赖:
- dagger库
- dagger-compiler用于代码生成
- javax.annotation用于Dagger之外需求的额外注解

在更新Dagger的配置后,你需要点击上面的按钮来同步工程的gradle文件。

\

到这里,你的应用已经有了一个可以准备使用的空项目。如果有错误,请确保你正确的遵守以上步骤。现在我们来实现我们的栗子项目。

实现Dagger 2

Step 1:识别依赖对象

对于本教程,我打算实现两个类,Vehicle和Motor。Motor是独立类,Vehicle是依赖类。我打算开始在包名为model中创建这个模型。

Motor类结构如下:

package com.androidheroes.tutsplusdagger.model;

/**
* Created by kerry on 14/02/15.
*/
public class Motor {

   private int rpm;

   public Motor(){
       this.rpm = 0;
   }

   public int getRpm(){
       return rpm;
   }

   public void accelerate(int value){
       rpm = rpm + value;
   }

   public void brake(){
       rpm = 0;
   }
}

该类只有一个名为rmp的属性,我准备通过accelerate和brake方法来修改它。并且使用getRpm方法来访问当前值。

Vehicle类结构如下:

package com.androidheroes.tutsplusdagger.model;

/**
* Created by kerry on 14/02/15.
*/
public class Vehicle {

   private Motor motor;

   public Vehicle(Motor motor){
       this.motor = motor;
   }

   public void increaseSpeed(int value){
       motor.accelerate(value);
   }

   public void stop(){
       motor.brake();
   }

   public int getSpeed(){
       return motor.getRpm();
   }
}

在类中,你看到我没有创建Motor类的新对象,即使使用了它的方法。在真实世界的应用中,这个类应当有更多的方法和属性,但现在尽量保持简单。

####Step 2:创建@Module类

现在要创建带@Module注解的类。该类将提供自带依赖的对象。因为这点,需要创建新的包名(只是为了保持顺序),命名为module并在其中增加新类,代码如下:

package com.androidheroes.tutsplusdagger.module;

import com.androidheroes.tutsplusdagger.model.Motor;
import com.androidheroes.tutsplusdagger.model.Vehicle;

import javax.inject.Singleton;

import dagger.Module;
import dagger.Provides;

/**
* Created by kerry on 14/02/15.
*/

@Module
public class VehicleModule {

   @Provides @Singleton
   Motor provideMotor(){
       return new Motor();
   }

   @Provides @Singleton
   Vehicle provideVehicle(){
       return new Vehicle(new Motor());
   }
}

在Step 1中我指出,Vehicle需要Motor来正常工作。这就是为什么你需要创建两个提供者,一个给Motor(独立模型),另一个给Vehicle(指明它的依赖)。

别忘了每个提供者(或方法)必须添加@Provides注解并且类必须有@Module注解。@Singleton注解指明对象只能有一个实例。

####Step 3: 依赖对象中请求依赖

现在

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Kotlin怎样使用Android的Dagger2,kotlindagger2
  • Android项目使用Dagger2进行依赖注入
  • 安卓开发 第一篇 关于依赖注入框架dagger2的使用和理解

相关文章

  • 2017-05-26Android多点触控技术,实现对图片的放大缩小平移,惯性滑动等功能
  • 2017-05-26手机无须ROOT不用修改hosts即可在本地测试安卓、苹果APP和H5应用,安卓h5
  • 2017-05-26android源码解析之(十一)--)应用进程启动流程
  • 2017-05-26使用 Diagwait 作为诊断工具,获取用于诊断 Oracle Clusterware 节点驱逐
  • 2017-05-26android:Activity启动模式之singleTop
  • 2017-05-26一个帖子学会Android开发四大组件,android四大
  • 2017-05-26在viewPager中双指缩放图片,双击缩放图片,单指拖拽图片,
  • 2017-05-26Android设计模式之单例模式的七种写法
  • 2017-05-26Android 快速发布开源项目到jcenter
  • 2017-05-26Android中通过反射获取资源Id,android获取资源id

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 安卓--selector简单使用,安卓--selector
    • Android 手机卫士--设置密码对话框,android设置密码
    • android源码解析之(十一)--)应用进程启动流程
    • Android 7.0(牛轧糖)新特性,android牛轧糖
    • 我的android学习经历5,android学习经历5
    • mongodb3.0.7生产环境扩容存储记录
    • Android 工程集成React Native 0.44 注意点,androidreact
    • Android 开源库和项目 3,android开源库项目
    • 使用WakeLock使Android应用程序保持后台唤醒,wakelockandroid
    • TextView,iostextview

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有