上一篇我们简单的介绍了一下RoboGuice的使用(【四】注入框架RoboGuice使用:(Your First System Service Injection)),今天我们来看下普通Java对象的使用注解的方法:

(一)为了在Activity中普通Java对象使用注解,必须实现下面两个步骤:

①:创建继承RoboActivity的Activity

②:使用 @Inject来进行注解POJO(普通java对象)

在前面我们介绍了View控件。资源文件(Resources),系统服务(System Service)等Android平台特有的注解方法。RoboGuice同时也支持注解 Plain
Old Java Objects(普通Java对象)。

可是Roboguice仅仅会默认去调用该对象的无參数的构造方法。所以我们须要注解的类必须有该无參构造方法。

看以下的这个样例:

class MyActivity extends RoboActivity {
@Inject Foo foo; // this will basically call new Foo();
}

该注解会通过无參数构造函数进行默认创建该实例。

(二)使用带有參数构造函数注解

假设有的情况下我们不想使用默认的构造函数。而是使用一个特定带有參数的构造函数,你有以下两种选择:

①:你能够对POJO(普通java对象)的构造函数进行注解

②:你能够创建一个provider和一个binding来进行实现

另外一种的方法我会写一篇专门的文章进行介绍,到时候各位童鞋能够去看下。

今天我们先关注第一个方法。

如今我们如果Foo类有一个Bar实例作为參数的构造函数。然后对Foo的该有參数的构造函数使用@Inject进行注解,那么此时RoboGuice会使用该带有參数的构造函数进行实例化。以下看下实现:

class Foo {
Bar bar; @Inject
public Foo(Bar bar) {
this.bar = bar;
}
}

那么如今这里的RoboGuice会怎么样去获取Bar的实例呢?这个和其它注解器的规则一样,还是会去使用Bar的默认构造函数,除非Bar的带參数的构造函数也相同使用的@Inject注解。

(三)使用变量字段注解

上面我们已经通过默认构造函数或者使用@Inject注解的带參数构造函数来进行获取了Foo实例。然而我们还能够使用这两种方法结合着来初始化变量。那就是使用Field
injection.

前面几篇文章中我们已经对View空间,资源文件(Resources)的注解方法。如今我们能够在Foo类中加入属性字段的注解来实现.

class Foo {
@Inject Bar bar; // Roboguice doesn't need a constructor, but you might...
}

上面的代码。当RoboGuice进行创建Foo实例的时候,它会首先创建Bar的实例而且直接注解到以bar命名的字段中。

该和上面的构造函数注入的样例等同。

这样的方法我们的代码会更加简洁。易读可是普通的其它Java对象假设没有使用Roboguice,那么我们会难以使用Foo对象。

假设你使用Field或者Constructor,你能够浏览以下的站点来查看注解的详情信息:

http://code.google.com/p/google-guice/wiki/Injections

【五】注入框架RoboGuice使用:(Your First POJO Injection)的更多相关文章

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

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

  2. 【二】注入框架RoboGuice使用:(Your First View Injection)

    上一篇我们简单的介绍了一下RoboGuice的使用([一]注入框架RoboGuice使用:(A brief example of what RoboGuice does)),今天我们我看下View的注 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. 基于artDialog的扩展

    /* * * 引用此文件必须引用以下两个资源文件,并且还要引用jQuery * <link href="ui-dialog.css" rel="stylesheet ...

  2. Java内存机制,内存地址

    问题一:String str1 = "abc"; String str2 = "abc"; System.out.println(str1==str2); // ...

  3. 搭建Hive所遇到的坑

    ##一.基本功能: 1.启动hive时报错 java.lang.ExceptionInInitializerError at java.lang.Class.forName0(Native Metho ...

  4. Android进度条控件ProgressBar使用

    ProgressBar有四种样式,圆形的(大,中,小)和直条形的(水平) 对应的style为 <LinearLayout xmlns:android="http://schemas.a ...

  5. trait 和abstract的区别在哪里

    无法在一个class上extend多个abstract class,但是你可以use多个trait abstract class是在类型系统上做文章,trait片段是mixin 类型约束 代码复用 c ...

  6. PHP并发IO编程实践

    PHP相关扩展 Stream:PHP内核提供的socket封装 Sockets:对底层Socket API的封装 Libevent:对libevent库的封装 Event:基于Libevent更高级的 ...

  7. 【转载】深入理解Java的接口和抽象类

    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

  8. SPLAY or SPALY ?

    写在前面: 由我们可爱的Daniel Sleator和Robert Tarjan提出的一种数据结构,平衡树的一种,本质是二叉树. 至于到底是splay还是spaly,我认为可能splay更对一些 毕竟 ...

  9. python 遍历xml所有节点

    1.xml文件 2.代码 #coding:utf-8 import xml import xml.etree.ElementTree as ET """ 实现从xml文件 ...

  10. eas之style接口

    Obj可以是KDTable对象,也可以是IRow,IColumn,ICell对象锁定Obj.getStyleAttributes().setLocked(true);Obj.getStyleAttri ...