`
qnlpkuge
  • 浏览: 44878 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Android RoboGuice 使用指南(2):第一个例子Hello World

 
阅读更多
首先介绍一下如果将Guice 和RoboGuice 的库添加到项目中。

下载RoboGuiceguice-2.0-no_aop.jar(not guice-3.0),或者下载
创建一个新Android项目,比如GuiceDemo,目标平台Android1.5以上。
一般可以在该项目下添加一个lib目录,将两个jar文件拷到lib目录下,然后通过: Project > Properties > Java Build Path > Libraries > Add External JARs


添加了对应guice 和roboguice库的引用之后,就可以开始编写第一个使用roboguice 的例子。

使用roboguice 的步骤:

1. 创建一个RoboApplication 的子类GuiceApplication,GuiceApplication为Appliacation的子类,因此需要修改AndroidManifest.xml,将Application 的name 指向这个类。可以参见Android简明开发教程九:创建应用程序框架

<application android:name=”GuiceApplication”
android:icon=”@drawable/icon” android:label=”@string/app_name”>
<activity android:name=”.GuiceDemo”
android:label=”@string/app_name”>
<intent-filter>
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
</activity>
</application>


2.  在这个简单的例子中,它使用的Layout 定义如下:
<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:orientation=”vertical”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”>
<TextView
android:id=”@+id/hello”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”@string/hello”/>
</LinearLayout>


我们定义了一个TextView ,它的id为hello.

假定这个应用使用一个IGreetingService ,它有一个方法getGreeting() 返回一个字符串,至于IGreetingService 如何实现,GuideDemo 不需要关心。


Dependency injection 设计模式的一个核心原则为: Separate behavior from dependency resolution. 也就说将应用需要实现的功能和其所依赖的服务或其它对象分离。 对本例来说GuiceDemo只要知道它依赖于IGreetingService 服务,至于IGreetingService有谁实现GuiceDemo并不需要知道。

在Roboguice 中使用@Inject 来表示这种依赖关系。

public class GuiceDemo extends RoboActivity  {
 
 @InjectView (R.id.hello) TextView helloLabel;
 @Inject IGreetingService greetingServce;
 
 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.main);
 helloLabel.setText(greetingServce.getGreetings());
 }
}

  • 使用RoboGuice 的Activity需要从RoboActivity派生(RoboActivity为Activity的子类).
  • 使用@Inject标注greetingServce依赖于IGreetingService服务
  • 使用@InjectView表示helloLabel 依赖于R.id.hello (XML)


代码中没有创建greetingServce 对象的代码(如 new xxx()) 和为helloLabel 赋值的代码。这些值都可以Roboguice 自动创建和赋值注入(Inject)到变量中。

为了说明问题,我们在代码中添加两个对getGreetings的实现,一个为HelloWorld, 一个为HelloChina:
public class HelloChina implements IGreetingService{
 
 @Override
 public String getGreetings() {
 return "Hello,China";
 }
 
}
 
public class HelloWorld implements IGreetingService{
 
 @Override
 public String getGreetings() {
 return "Hello,World";
 }
 
}


3. 到这里,你可能有些困惑,RoboGuice怎么知道使用那个类(HelloWorld或是HelloChina)为GuiceDemo中的greetingServce 赋值呢?这是通过在Module 中定义binding 来实现的。

在项目中添加一个GreetingModule (从AbstractAndroidModule 派生)重载configure方法:
public class GreetingModule extends AbstractAndroidModule{
 
@Override
protected void configure() {
bind(IGreetingService.class).to(HelloWorld.class);
//bind(IGreetingService.class).to(HelloChina.class);
 
}
 
}


将IGreetingService 绑定到HelloWorld 类。

然后在GuiceApplication 的addApplicationModules 添加上述模块:

public class GuiceApplication extends RoboApplication {
 
 protected void addApplicationModules(List<Module> modules) {
 modules.add(new GreetingModule());
 }
 
}


可以将GreetingModule 绑定改为HelloChina ,对比一下:



通过改变binding ,GuiceDemo 显示了不同的结果,GuiceDemo不依赖于具体的实现,可以非常方便的改变接口的实现而无需更改GuiceDemo的代码。大大降低了类于类之间的耦合性。

后面将逐个介绍Guice和RoboGuice支持的Binding类型和用法(Guice)以及与android 平台相关的Dependency injection (RoboGuice)
  • 大小: 51 KB
  • 大小: 12.6 KB
  • 大小: 19.2 KB
分享到:
评论

相关推荐

    Android RoboGuice 使用指南 - v1.1

    ### Android RoboGuice 使用指南 - v1.1 #### 概述 RoboGuice 是一款专为 Android 平台设计的轻量级依赖注入框架,它基于 Google Guice 构建,能够极大地简化 Android 应用程序的开发过程。通过使用 RoboGuice,...

    CXF的第一个例子helloWorld

    【标题】"CXF的第一个例子helloWorld"是一个基础教程,主要介绍了如何使用Apache CXF框架创建一个简单的Web服务。Apache CXF是一个开源的Java框架,它用于构建和开发Web服务,支持SOAP、RESTful等多种通信协议。这个...

    笨鸟学Android开发(1):HelloWorld

    在Android开发的世界里,"HelloWorld"是每个开发者迈出的第一步。这个项目旨在引导初学者了解Android应用的基础构建过程,让我们一起踏入这个充满创新和技术的世界。 Android是Google主导的开源移动操作系统,它...

    Android demo Android helloworld

    在Android开发领域,"Android demo Android helloworld"通常是指初学者入门的第一个小程序,它标志着开发者在Android平台上迈出了第一步。这个简单的程序展示了如何在Android设备上显示“Hello, World!”的文字,是...

    Delphi第一个源码:HelloWorld例子.rar

    Delphi第一个源码:HelloWorld例子,HelloWorld是个很经典的初学例子,被默认为学习和种语言的第一个小程序,用以在屏幕上输出“HelloWorld”,或是控制台、或是弹出窗口的形式,本程序就是Delphi中的HelloWorld,...

    Android开发:使用Kotlin实现简易Hello World应用

    内容概要:本文档详述了如何利用Kotlin与Android Studio创建并部署一个简单的‘Hello, World!’移动应用程序。首先介绍了开发环境搭建的步骤,随后指导读者完成从创建新项目,到修改UI布局和Activity代码的整个流程...

    android第一个程序hello world 的编写视频教程

    在Android平台上进行应用程序开发,"Hello World"是一个经典的起点,它是每个开发者学习新语言或框架时的第一个示例。本教程将带你逐步了解如何在Android环境中创建你的第一个"Hello World"程序,通过网易公开课中的...

    关于"Hello World!"程序

    std::cout &lt;&lt; "Hello, world!" &lt;&lt; std::endl; std::operator(std::cout, "Hello, world!"); // friend cout是模板类的实例 std::cout.operator(std::endl); // member endl是函数模板指针 std::...

    android helloWorld程序

    在Android开发领域,"HelloWorld"程序是每个初学者入门时的第一个项目,它标志着你在Android编程之旅的起点。这个简单的程序旨在教你如何在Android环境中创建并运行一个基本的应用。让我们详细了解一下这个过程以及...

    hello world _android

    在Android开发领域,"Hello World"程序是每个初学者入门时的第一个项目,它标志着开发者向Android编程世界的迈进。"hello world _android"这个标题暗示我们将深入探讨如何在Android环境中创建并运行一个简单的"Hello...

    Android第一行代码源码 HelloWorld

    Android第一行代码源码 ...HelloWorldAndroid第一行代码源码 HelloWorldAndroid第一行代码源码 HelloWorldAndroid第一行代码源码 HelloWorldAndroid第一行代码源码 HelloWorldAndroid第一行代码源码 HelloWorld

    hello world hello world

    ”是初学者编写的第一个程序,它会在执行时打印出这句话,以此来验证编程环境的正确配置。这个例子可能是表示我们要讨论的是关于编程或者软件开发的基础知识。 标签“hello world”进一步强化了这个主题,可能意味...

    Android HelloWorld程序

    在Android开发领域,"HelloWorld"程序是每个初学者入门时的第一个接触点,它标志着开发者在Android世界中的第一次正式亮相。这个程序虽然简单,但却是理解Android应用开发基础的重要起点。接下来,我们将深入探讨...

    实验一 安装Android Studio 3.0和第一个Hello World程序.pdf

    Android Studio 3.0 安装和第一个Hello World程序 Android Studio 3.0 是一个功能强大且流行的Android集成开发环境(IDE),它提供了一个完整的开发工具集,包括代码编辑、编译、调试和模拟器等功能。下面是Android...

    Struts2的第一个实例helloworld

    本实例将引导我们逐步了解如何使用Struts2创建一个简单的“Hello, World!”程序。 首先,我们需要了解Struts2的基础架构。Struts2框架的核心组件包括Action类、配置文件(struts.xml)、拦截器(Interceptors)以及...

    android_helloworld

    本文将深入探讨“android_helloworld”项目,理解Android应用的基础结构,以及如何在Android Studio中创建和运行一个简单的应用。 首先,"android_helloworld"项目的核心是展示Android应用程序的基本构成。Android...

    使用Android Studio开发HelloWorld应用程序

    使用 Android Studio 开发 HelloWorld 应用程序 Android Studio 是 Google 官方推出的集成开发环境(IDE),专门为 Android 应用程序开发设计。使用 Android Studio 可以快速创建、编译、调试和优化 Android 应用...

    androidNDK helloworld

    这个"androidNDK helloworld"资源就是一个入门级别的示例,旨在帮助初学者理解如何在Android项目中集成和使用NDK。下面将详细讲解Android NDK的基础知识以及如何创建并运行一个简单的"Hello, World!"程序。 首先,...

    JBPM_DEMO例子 Hello World

    【JBPM_DEMO例子 Hello World】是入门级的教程,主要展示了如何使用JBPM(Java Business Process Management)工作流引擎实现一个简单的“Hello World”流程。这个例子旨在帮助初学者理解JBPM的基本概念和操作流程。...

    Stuido中使用JNI例子HelloWorld

    本示例将详细介绍如何在Android Studio(Stuido)中创建并使用一个简单的JNI(HelloWorld)例子,包括生成本地方法库(so文件)以及在其他项目中调用。 1. **创建JNI项目** 首先,我们需要创建一个新的Android ...

Global site tag (gtag.js) - Google Analytics