在我们平时开发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. 业余开发Android App的架构演变

    闲暇之余,开发了一款休闲类app,虽然用户量不多,但确实花了不少心血在这上面.然而,开发出来的结果,与之前想好的架构,还是有不少区别. 下面,记录下这款app架构的演变: 最初,只想写个app,能与机 ...

  2. 循环插入记录,id每次加1

    sql语句写法: begin for i in 1 .. 100 loop insert into table_name values(....); end loop; commit; end; 例子 ...

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

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

  4. Xcode相关概念:Target、Project、Scheme、Workspace

    创建并编译Xcode工程时,有几个常用概念想在这里记一下. Xcode Target: 定义:A target defines a single product; .... 理解:输出文件,等同于VS ...

  5. 配置服务器 Ubuntu 记录+踩坑

    从零开始配置服务器用于ss+站点 1. SS 首先安装pyenv,安装pyenv之前先安装必要环境,具体命令行请见: https://github.com/pyenv/pyenv/wiki/Commo ...

  6. java如何区分同时继承的父类和实现的接口中相同的方法

    基类代码: public class Father { public Father() { System.out.println("基类构造函数{"); show(); Syste ...

  7. EF 迁移操作

    一. 模型设计 1.  遵循EF标准,注意表关系配对 2.  数据模型里尽量把必须的属性和说明都写全 3.  EF默认id字段为主键,如果没有,需指定主键 二. 数据迁移 1.  命令运行环境:vis ...

  8. PIE SDK 监督分类对话框类(SupervisedClassificaitonDialog)使用经验

    最近研究遥感,用到分类算法,PIE SDK正好提供了一些方法可供调用,他们的官方博客上也有相应的示例代码(可参考:https://www.cnblogs.com/PIESat/p/10725270.h ...

  9. Android table布局开发的一个简单的计算器

    结果如图: XML文件如下: <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" ...

  10. 我已经迷失在事件环(event-loop)中了【Nodejs篇】

    我第一次看到他事件环(event-loop)的时候,我是一脸懵,这是什么鬼,是什么循环吗,为什么event还要loop,不是都是一次性的吗? 浏览器中和nodejs环境中的事件环是有一些区别的,这里我 ...