• 【五】注入框架RoboGuice使用:(Your First POJO Injection)


         

    上一篇我们简单的介绍了一下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

        

          

  • 相关阅读:
    leetcode 1 Two sum
    hdu1099
    hdu1098
    函数执行顺序
    浏览器滚动条
    2048的制作
    JavaScript--对象-检查一个对象是否是数组
    JavaScript--格式化当前时间
    JavaScript--模拟验证码
    JavaScript--模拟网络爬虫
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/7090034.html
Copyright © 2020-2023  润新知