Android roboguice 开源框架使用

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

时间: 2024-12-06 19:55:42

Android roboguice 开源框架使用的相关文章

Android RoboGuice开源框架、Butter Knife开源框架浅析

Google Guice on Android(RoboGuice) 今天介绍一下Google的这个开源框架RoboGuice, 它的作用跟之前讲过的Dagger框架差点儿是一样的,仅仅是Dagger比它的功能更强大一些. Dagger通过专注于一种简化的功能集以一种不同的方式达到了更好的性能.有人觉得RoboGuice节约了大量的时间.较少的代码意味着较少的错误.较少的样板代码意味着能够把很多其它的时间放到应用的核心逻辑上.所以这就是为什么我们要使用这些开源框架来开发的原因. 以下我们来说说R

android AsyncHttpClient 开源框架的使用

AsyncHttpClient 1.在很多时候android都需要进行网络的操作,而android自带的HttpClient可以实现,但要进行很多网络连接的时候(如:下载很多图片),就需要线程池来进行管理,但默认都是阻塞式操作.这种模型效率不高,对并发要求高的 APP 来讲,并不适用,要用AsyncHttpClient 就必须下载一个jar包   ------>>  下载地址. 2.AsyncHttpClient框架是异步的框架,而且已经封装好了了线程池的操作.所以对网络的操作都是很快的! 3

25类Android常用开源框架

1.图片加载,缓存,处理 框架名称 功能描述 Android Universal Image Loader 一个强大的加载,缓存,展示图片的库,已过时 Picasso 一个强大的图片下载与缓存的库 Fresco 一个用于管理图像和他们使用的内存的库 Glide 一个图片加载和缓存的库,使用的App有:网易新闻 GlidePalette Android Lollipop Palette is now easy to use with Glide PicassoPalette Android Lol

【转载】android 常用开源框架

对于Android初学者以及对于我们菜鸟,这些大神们开发的轻量级框架非常有用(更别说开源的了). 下面转载这10个框架的介绍:(按顺序来吧没有什么排名). 一.  Afinal 官方介绍: Afinal是一个android的ioc,orm框架,内置了四大模块功能:FinalAcitivity,FinalBitmap,FinalDb,FinalHttp. 通过finalActivity,我们可以通过注解的方式进行绑定ui和事件. 通过finalBitmap,我们可以方便的加载bitmap图片,而无

Android使用开源框架加载图片

Android开发时,有时候需要们来加载网络图片,我们可以通过api的方式进行加载,但是前几天做的时候,发现了一个优秀的开源框架,可以帮助我们非常简单便捷的进行图片的加载,所以记录一下. 我所用的是: android-smart-image-view 在github上的地址是:https://github.com/loopj/android-smart-image-view,我们可以直接进行搜索,github对于我们程序员来说简直是宝库啊,一定要能够擅长应用. 下载下来后,我们把其目录下的src

Android UI开源框架

1.Side-Menu.Android 分类侧滑菜单,Yalantis 出品. 项目地址:https://github.com/Yalantis/Side-Menu.Android 2.Context-Menu.Android 可以方便快速集成漂亮带有动画效果的上下文菜单,Yalantis出品. 项目地址:https://github.com/Yalantis/Context-Menu.Android 3.Pull-to-Refresh.Rentals-Android 提供一个简单可以自定义的下

Android第三方开源框架之SlidingMenu详解 [转载]

SlidingMenu简介:       SlidingMenu的是一种比较新的设置界面或配置界面效果,在主界面左滑或者右滑出现设置界面,能方便的进行各种操作.目前有大量的应用都在使用这一效果.如Evernote.Google+.Foursquare等,国内的豌豆夹,人人,360手机助手等都使用SlidingMenu的界面方案. 开源框架下载地址,集成了另一个开源项目ActionBarSherlock:点击下载.              注意: SlidingMenu依赖于另一个开源项目Act

Android eventbus开源框架(模仿)

感谢开源的魅力.开源很美. SubscriberMethodFinder 发现注册方法类 SubscriberMethod 用户注册的方法组合 Subscription 用户和方法键值对应类 AsyncPoster 异步发起类 HandlerPoster 主线程发起类 PostBeen 消息类(发起类根据消息执行回调) EventBus 访问类(建筑者模式) ** 注意!!!!!在onCreate 方法里面开启新线程一般默认为主线程,只有主线程空闲的时候才可以发起.Looper.myQueue(

Android 常用开源框架源码解析 系列 (九)dagger2 呆哥兔 依赖注入库

一.前言 依赖注入定义 目标类中所依赖的其他的类的初始化过程,不是通过手动编码的方式创建的. 是将其他的类已经初始化好的实例自动注入的目标类中. "依赖注入"也是面向对象编程的 设计模式 -----组合的配套使用 作用 :降低程序的耦合,耦合就是因为类之间的依赖关系所引起的 产生场景:在一个对象里去创建另一个对象的实例 问题:过多的类,对象之间的依赖会造成代码难以维护. 不符合开闭原则的对象的引用写法:错误示例: public class ClassA { classB b ; pub