在我们平时开发Android项目的时候比如常常须要使用各种View控件,然后进行声明。findViewById。而且进行强转。每次都要写这种代码就显得很繁琐,而且easy出错哦。那么针对这种情况且不限定于以上的这类情况,Dependency injection
能够大大减少了类之间的依赖性,能够通过annotation (Java)描写叙述类之间的依赖性,避免了直接调用类似的构造函数或是使用Factory来參加所需的类,从而减少类或模块之间的耦合性。以提高代码重用并增强代码的可维护性。Google Guice提供了Java平台上一个轻量级的 Dependency injection 框架,并能够支持开发Android应用。以下将使用Android平台来说明Google
Guice的使用方法。

简单的来说:Guice 减少了Java代码中使用 new 和 Factory函数的调用。能够把Guice 的@Inject 看作 new 的一个替代品。使用Guice可能还须要写一些Factory方法,但你的代码不会依赖这些Factory方法来创建实例。

使用Guice 改动代码,单元測试已经代码重用变得更easy。

GitHub开源地址:https://github.com/roboguice/roboguice

RoboGuice 为Android平台上基于Google Guice开发的一个库。能够大大简化Android应用开发的代码和一些繁琐反复的代码。

比方代码中可能须要大量使用findViewById在XML中查找一个View,并将其强制转换到所需类型,onCreate 中可能有大量的类似代码。

RoboGuice 同意使用annotation 的方式来描写叙述id于View之间的关系。其余的工作由roboGuice库来完毕。To
give you an idea, take a look at this simple example of a typical Android activity:

我们先来看一下一个比較常规的Activity的样例:

<span style="font-size:18px;"> class AndroidWay extends Activity {
TextView name;
ImageView thumbnail;
LocationManager loc;
Drawable icon;
String myName; public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
name = (TextView) findViewById(R.id.name);
thumbnail = (ImageView) findViewById(R.id.thumbnail);
loc = (LocationManager) getSystemService(Activity.LOCATION_SERVICE);
icon = getResources().getDrawable(R.drawable.icon);
myName = getString(R.string.app_name);
name.setText( "Hello, " + myName );
}
} </span>

看上面的那么代码。假设你正在阅读onCreate()方法中的代码,你是必须跳过当中的5行控件或者资源的初始化代码,然后我们才干够看到最关键的代码(name.settext(“Hello,”+myName))。

那么如今我们使用RoboGuice框架来实现同样的功能。例如以下:

<span style="font-size:18px;"> @ContentView(R.layout.main)
class RoboWay extends RoboActivity {
@InjectView(R.id.name) TextView name;
@InjectView(R.id.thumbnail) ImageView thumbnail;
@InjectResource(R.drawable.icon) Drawable icon;
@InjectResource(R.string.app_name) String myName;
@Inject LocationManager loc; public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
name.setText( "Hello, " + myName );
}
} </span>

请看在这个样例onCreate()中一眼就少了非常多资源,控件初始化的代码,直接进入业务逻辑,仅仅需使用@InjectView 来描写叙述 view 和Id之间的关系,RoboGuice 自己主动完毕余下的工作,这样是不是简洁多了.

除此之外,RoboGuice对于系统服务(SystemService),资源文件,View控件甚至自己定义的对象能够使用使用。上面仅仅是对于RoboGuice的一个简介,接下来的文章我继续解说RoboGuice的详细使用。

參考地址:

RoboGuice Home介绍: https://github.com/roboguice/roboguice/wiki

RoboGuice须要的jar包下载:http://www.imobilebbs.com/wordpress/archives/3111

【一】注入框架RoboGuice使用:(A brief example of what RoboGuice does)的更多相关文章

  1. android 注入框架 DI

    android 主要注入框架以及github如下: (1)Roboguice https://github.com/roboguice/roboguice (2)Butterknife https:/ ...

  2. 【十】注入框架RoboGuice使用:(Your First Testcase)

    上一篇我们简单的介绍了一下RoboGuice的使用([九]注入框架RoboGuice使用:(Your First Injected Service and BroadcastReceiver)),今天 ...

  3. 【九】注入框架RoboGuice使用:(Your First Injected Service and BroadcastReceiver)

    上一篇我们简单的介绍了一下RoboGuice的使用([八]注入框架RoboGuice使用:(Your First Injected Fragment)),今天我们来看下服务(Service)和广播接受 ...

  4. 【四】注入框架RoboGuice使用:(Your First System Service Injection)

    上一篇我们简单的介绍了一下RoboGuice的使用([三]注入框架RoboGuice使用:(Your First Resource Injection)),今天我们来看下系统服务的使用注解的方法: 为 ...

  5. 【十一年】注入框架RoboGuice采用:(Your First Injection into a Custom View class)

    上一篇我们简单的介绍了一下RoboGuice的使用([十]注入框架RoboGuice使用:(Your First Testcase)),今天我们来看下自己定义View的注入(Custom View). ...

  6. 【十三】注入框架RoboGuice采用:(Logging via Ln)

    上一篇我们简单的介绍了一下RoboGuice的使用([十二]注入框架RoboGuice使用:(Your First Injected ContentProvider)),今天我们来看下Log日志使用. ...

  7. 【七】注入框架RoboGuice使用:(Your First Custom Binding)

    上一篇我们简单的介绍了一下RoboGuice的使用([六]注入框架RoboGuice使用:(Singletons And ContextSingletons)),今天我们来看下自己定义绑定(bindi ...

  8. 【三】注入框架RoboGuice使用:(Your First Resource Injection)

    上一篇我们简单的介绍了一下RoboGuice的使用([二]注入框架RoboGuice使用:(Your First View Injection)),今天我们来看下资源文件的使用注解的方法: 为了在Ac ...

  9. 【八】注入框架RoboGuice使用:(Your First Injected Fragment)

        上一篇我们简单的介绍了一下RoboGuice的使用([七]注入框架RoboGuice使用:(Your First Custom Binding)),今天我们来看下fragment的注解     ...

  10. 【六】注入框架RoboGuice使用:(Singletons And ContextSingletons)

    上一篇我们简单的介绍了一下RoboGuice的使用([五]注入框架RoboGuice使用:(Your First POJO Injection)),今天我们来看下单例以及上下文单例(ContextSi ...

随机推荐

  1. [ NOI 2001 ] 方程的解数

    \(\\\) \(Description\) 已知一个 \(N\) 元高次方程: \[ k_1x_1^{p_1}+k_2x_2^{p_2}+...+k_nx_n^{p_n}=0 \] 要求所有的 \( ...

  2. bash 博弈

    转载并修改自: http://www.cnblogs.com/wulangzhou/archive/2013/03/14/2959660.html 简单的取拿游戏一堆石子(或者其它的什么东西),下面是 ...

  3. P1044 栈

    题目背景 栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表. 栈有两种最重要的操作,即pop(从栈顶弹出一个元素)和push(将一个元素进栈). 栈的重要性不言自明,任何 ...

  4. UVM基础之---------Reporting Classes

    Reporting 类提供了一组工具用于格式化报告输出 report机制大概包括四个主要的类uvm_report_object,uvm_report_handler, uvm_report_serve ...

  5. Sqoop hive 和mysql 交互 完整案例

    本文完成:在hive里建管理表:注入部分数据:利用sqoop导入mysql中 期间:解决中文乱码问题   飞行报告故障表 建表命令 查看表 人工灌入少量数据 Windows系统向Linux系统数据传输 ...

  6. 安全,轻松的Axios与Nuxt.js集成

    modules: [ // Doc: https://github.com/nuxt-community/axios-module#usage '@nuxtjs/axios' ], /* ** Axi ...

  7. JavaScript 中实现 sleep

    来自推特上 Windows 故障分析的笑话 图片来源:me.me 推上看到的笑话,Windows 故障分析的实现. 然后想起来 JavaScript 中如何实现这个 sleep() 函数让代码暂停指定 ...

  8. 01Hypertext Preprocessor

    Hypertext Preprocessor PHP即Hypertext Preprocessor是一种被广泛使用的开放源代码多用途动态交互性站点的强有力的服务器端脚本语言尤其适用于 Web开发人员可 ...

  9. 浅谈es6 promise

    本文是借鉴于ac黄的博客. 接触es6也有几个月了,貌似没有系统的去学习过它,总是用到什么,查查什么.今天就说下es6中的promise对象. 先说说promise解决了什么问题? 写前端的同学都经常 ...

  10. flex 三列布局

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...