Android roboguice 开源框架使用

原创 2015年05月13日 20:40:55

Android roboguice 应用

开源的roboguice是一个依赖注入框架,如果你用过Spring 应该知道其好处。
减少程序员的负担,代码变的更加简洁。

地址:https://github.com/roboguice/roboguice

工具用的是Android Studio 因为Gradle可以自动添加第三方库。

Gradle部分内容:


dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.1.1'
    compile 'org.roboguice:roboguice:2.0'
    compile ('com.google.inject.extensions:guice-assistedinject:3.0'){
        exclude group: 'com.google.inject'
    }
}

版本用的是2.0,官方版本最新是3.0

演示基本用法

import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import com.google.inject.Binder;
import com.google.inject.ImplementedBy;
import com.google.inject.Inject;
import com.google.inject.Module;
import roboguice.activity.RoboActivity;
import roboguice.inject.ContentView;
import roboguice.inject.InjectView;

//会调用setContentView方法
@ContentView(R.layout.activity_main)
public class MainActivity extends RoboActivity {

    @InjectView(R.id.text1)
    private TextView textView; //代替findViewById 不用自己强转类型

    @InjectView(R.id.btn1)
    private TextView button;

    @Inject
    private MyCache<String,String> myCache;//单列

    @Inject
    private IService myService;//接口注入

    @Inject
    private Toaster toaster;//Toast简单的用法封装

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                textView.setText("Test is ok." + myCache);
                toaster.showMsg("hey, I like to talk to you" );
                myService.login("1","1");
            }
        });
    }
}

Toaster.java

import android.app.Activity;
import android.widget.Toast;
import com.google.inject.Inject;
import roboguice.inject.ContextSingleton;

/**
 * Created by gaofeng on 15-5-13.
 */
//可以获取当前Activity中的上下文
@ContextSingleton
public class Toaster {

    @Inject
    private Activity activity;

    //不用传上下文了
    public void showMsg(String msg) {//不用自己传入Context,Activity上下文对象
        Toast.makeText(activity,msg, Toast.LENGTH_SHORT).show();

    }
}

MyCache.java

import com.google.inject.Singleton;
import java.util.HashMap;
import java.util.Map;
/**
 * Created by gaofeng on 15-5-13.
 */
//Cache通常是单列的
@Singleton
public class MyCache<K,V> { //这里只是演示,没有写太复杂

    Map<K,V> map = new HashMap<K,V>();

    public void put(K k,V t) {
       map.put(k,t);
    }

    public V get(K k) {
        return map.get(k);
    }
}

下面是接口实例化的代码,做java ssh web开发一般都是这个样子

public interface IService { //简单业务接口
    public void login(String u,String passwd);
}
import roboguice.inject.ContextSingleton;
public class MyService implements  IService {

 @Inject
    private MyCache<String,String> myCache; //和上一次的对象是同一个,单列对象

    private Context context;

    public MyService() {

    }

    public MyService(Context context) {
        this.context = context;
    }


    @Override
    public void login(String u, String passwd) {
        Log.d("", "Service Login>>>>" + context + " " + myCache); 
        //业务代码xxxx
    }}

实现上面的接口实列化 需要配置注册

import android.content.Context;
import android.util.Log;

import com.google.inject.AbstractModule;

/**
 * Created by gaofeng on 15-5-13.
 */
public class CustomModule2 extends AbstractModule {

    private Context context;//系统会自己传入上下文

    public CustomModule2(Context context) {
        this.context = context;
    }

    @Override
    protected void configure() {
       Log.d("", "CustomModule2>>>>>>>");
       bind(IService.class).toInstance(new MyService(context));//注册
    }
}

还需要配置在 res/values/ 中添加文件roboguice.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="roboguice_modules">
        <item>com.example.gaofeng.roboguice_demo.CustomModule2</item>
    </string-array>
</resources>

掌握基本的用法就能减少大量的代码。
不用自己去new对象,单列也很好弄,不用自己定义static对象


参考: https://github.com/roboguice/roboguice/wiki

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android 依赖注入框架RoboGuice

概述 在开发应用时一个基本原则是模块化,并且尽最大可能性地降低模块之间的耦合性。Dependency injection 大大降低了类之间的依赖性,可以通过annotation描述类之间的依赖性,避免...
  • xbynet
  • xbynet
  • 2015年05月01日 17:34
  • 1862

JPA Guice的JPA持久化

Java Persistence API (JPA) JPA 是个标准发布的JSR-220 (或 EJB3)的一部分. 大致与HIbernate或者Oracle的TopLink相同; 他们也是很多重要...
  • yys79
  • yys79
  • 2014年01月02日 11:46
  • 2202

Guice入门实例和单例模式

package com.ilucky.guice;import com.google.inject.Guice; import com.google.inject.Injector;/** * v1...
  • sidongxue2
  • sidongxue2
  • 2017年05月22日 14:35
  • 285

Android快速开发必备——依赖注入(DI)类库的选择ButterKnife,AndroidAnnotations,RoboGuice

现在做移动端开发的开发者,不管是Android和IOS,公司一般都是喜欢那种具备独立开发能力的人,因为APP项目相对较小,有时候一个人完全可以单独胜任一个项目。所以如果我们要能够具备独立开发的能力,快...
  • finddreams
  • finddreams
  • 2015年05月05日 16:21
  • 2537

RoboGuice使用心得,什么是RoboGuice?

RoboGuice 使用谷歌自己的Guice库,给Android带来了简单和易用的依赖注入。如果你使用过Spring或Guice的话,你可能已经知道这种编程方式是多么的便捷。 我们使用一个简单地示例...
  • oliver102
  • oliver102
  • 2013年08月17日 00:57
  • 569

Android 依赖注入框架RoboGuice

概述 在开发应用时一个基本原则是模块化,并且尽最大可能性地降低模块之间的耦合性。Dependency injection 大大降低了类之间的依赖性,可以通过annotation描述类之间的依赖性,避免...
  • xbynet
  • xbynet
  • 2015年05月01日 17:34
  • 1862

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

上一篇我们简单的介绍了一下RoboGuice的使用(【十二】注入框架RoboGuice使用:(Your First Injected ContentProvider)),今天我们来看下Log日志使...
  • jiangqq781931404
  • jiangqq781931404
  • 2014年10月30日 21:41
  • 2121

关于android Roboguice的依赖注入

本文原标题是如何成为一个偷懒又高效的Android开发人员,我敢肯定你对这个标题肯定心存疑惑,但事实就是如此,这个标题完全适合Android开发人员。据我所知, Android程序员不情愿写 find...
  • u013651405
  • u013651405
  • 2015年08月18日 10:13
  • 406

使用依赖注入函数库Roboguice

本文原标题是如何成为一个偷懒又高效的Android开发人员,我敢肯定你对这个标题肯定心存疑惑,但事实就是如此,这个标题完全适合Android开发人员。据我所知, Android程序员不情愿写 find...
  • sunyuyangg123
  • sunyuyangg123
  • 2014年06月06日 10:45
  • 482

android roboguice 开发遇到的问题(一)

roboguice2.0 升级3.0
  • gyh790005156
  • gyh790005156
  • 2014年12月18日 09:39
  • 308
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android roboguice 开源框架使用
举报原因:
原因补充:

(最多只允许输入30个字)