在开发应用时一个基本原则是模块化,并且近最大可能性地降低模块之间的耦合性。在Java平台上Spring Framework 以及.Net 平台 CAB ,SCSF 和Prism (WPF,Silverlight)中都有对Dependency injection 的支持。
Dependency injection 大大降低了类之间的依赖性,可以通过annotation (Java)或是SeviceDepdendcy (.Net) 描述类之间的依赖性,避免了直接调用类似的构造函数或是使用Factory来参加所需的类,从而降低类或模块之间的耦合性,以提高代码重用并增强代码的可维护性。
Google Guice提供了Java平台上一个轻量级的 Dependency injection 框架,并可以支持开发Android应用。本指南将使用Android平台来说明Google Guice的用法。
简单的来说:Guice 降低了Java代码中使用 new 和 Factory函数的调用。可以把Guice 的@Inject 看作 new 的一个替代品。使用Guice可能还需要写一些Factory方法,但你的代码不会依赖这些Factory方法来创建实例。 使用Guice 修改代码,单元测试已经代码重用变得更容易。
RoboGuice 为Android平台上基于Google Guice开发的一个库,可以大大简化Android应用开发的代码和一些繁琐重复的代码。比如代码中可能需要大量使用findViewById在XML中查找一个View,并将其强制转换到所需类型,onCreate 中可能有大量的类似代码。RoboGuice 允许使用annotation 的方式来描述id于View之间的关系,其余的工作由roboGuice库来完成。比如:
class AndroidWay extends Activity { TextView name; ImageView thumbnail; LocationManager loc; Drawable icon; String myName; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); name = (TextView) findViewById(R.id.name); thumbnail = (ImageView) findViewById(R.id.thumbnail); loc = (LocationManager) getSystemService(Activity.LOCATION_SERVICE); icon = getResources().getDrawable(R.drawable.icon); myName = getString(R.string.app_name); name.setText( "Hello, " + myName ); } }
如果使用roboguice 来写:
class RoboWay extends RoboActivity { @InjectView(R.id.name) TextView name; @InjectView(R.id.thumbnail) ImageView thumbnail; @InjectResource(R.drawable.icon) Drawable icon; @InjectResource(R.string.app_name) String myName; @Inject LocationManager loc; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); name.setText( "Hello, " + myName ); } }
只需使用@InjectView 来描述 view 和Id之间的关系,RoboGuice 自动完成余下的工作,代码简洁易读。在介绍完Google Guice ,再接着介绍RoboGuice 在Android平台上使用方法。
参考地址:http://www.imobilebbs.com/wordpress/?p=2480 http://www.cnblogs.com/xiongbo/archive/2011/05/31/2063355.html
上一篇我们简单的介绍了一下RoboGuice的使用(【十二】注入框架RoboGuice使用:(Your First Injected ContentProvider)),今天我们来看下Log日志使用。 Android应用通过会使用内置的android.util.log在Android控制台上面打印日志信息。RoboGuice也提供了另外的日志管理,你可能会想
现在官网都是3.0版本了,不知道为什么在我的机子搭建不成功,一直报错,就用了2.0的。另外RG 4也马上快出来了 3.0集成了Google Map Fragments and action bar sherlock等。3.0性能更好启动更快,官方的话:Based on our testing, we expect most apps to see improved startup times of
RoboGuice提示的错误信息 01-17 11:48:14.929: W/nalizableReferenceQueue(1871): Could not load Finalizer in its own class loader. Loading Finalizer in the current class loader instead. As a result, you will not
在我们平时开发Android项目的时候例如经常需要使用各种View控件,然后进行声明,findViewById,并且进行强转。每次都要写这样的代码就显得非常繁琐,并且容易出错哦。那么针对这种情况且不限定于以上的这类情况,Dependency injection 可以大大降低了类之间的依赖性,可以通过annotation (Java)描述类之间的依赖性,避免了直接调用类似的构造函
RoboGuice是Guice根据android平台设计的框架,较少了繁琐的查找代码,对象实例化等工作
Android代码注入框架RoboGuice 概述 RoboGuice 2可以让我们更方便、快捷地编写android代码。在写android代码时,我们在使用getIntent().getExtras()可能会忘记判空,findViewById()必须强制转换成TextView很别扭?RobotGuice 2可以帮我们省掉这些步骤。 RoboGuice 2可以注入到View,Resource,Sy
RoboGuice是依赖注入型的注解工具,还有一种编译器型的注解工具ButterKnife,可以参考这篇文章。 一.注入顺序及使用地方: Robo(Fragment)Activity的onCreate方法中启动注入,在调用super.onCreate()方法后即可使用 RoboFragment的onCreate方法中启动注入非view对象,onViewCreate方法(onCreateView设置
概述 在开发应用时一个基本原则是模块化,并且尽最大可能性地降低模块之间的耦合性。Dependency injection 大大降低了类之间的依赖性,可以通过annotation描述类之间的依赖性,避免了直接调用类似的构造函数或是使用Factory来参加所需的类,从而降低类或模块之间的耦合性,以提高代码重用并增强代码的可维护性。 Google Guice提供了Java平台上一个轻量级的 Depend
//使用框架前 class AndroidWay extends Activity { TextView name; ImageView thumbnail; LocationManager loc; Drawable icon; String myName; public void onCreate(Bundle savedInstanceState) { super.onCreate(save
转载自http://www.cnblogs.com/pedro-neer/p/5257037.html 经过前两篇的介绍,我们了解了如何使用RoboGuice方便的为我们注入需要的对象,这篇将着重说明原理。 一.Guice与RoboGuice Guise是Google开发的一个轻量级的依赖注入框架,主要针对Java使用的。 RoboGuice是基于Guice库开发,目的为Android提供一套简单
转载自 https://www.cnblogs.com/pedro-neer/p/5251610.html RoboGuice是什么? 一个Android上的依赖注入框架。 依赖注入是什么? 从字面理解,这个框架做了两件事情,第一是去除依赖,第二是注入依赖。简单理解就是,将对象的初始化委托给一个容器控制器,即去除依赖,再从容器控制器中构建依赖,注入回原本的对象中,即注入依赖。 依赖注入的好处是对象
RoboGuice 使得进行Android开发更加方便,使得开发变得更加简单也更有乐趣。 当你调用getIntent().getExtras()是不是经常检查是否为null? 想想调用findViewById()并映射到TextView确实有必要么? RoboGuice 可以帮助解决这类的判断工作, 是通过调用bindService获取一个用户service,调用getSystemService
原文链接 什么是roboguice? roboguice是一个给Android带来简单方便的依赖注入方式的框架,用到了谷歌自己的Guice library,如果你用过Spring或者Guice,你就会知道这种编程方式有多么快捷 典型Activity写法和roboguice写法比较 典型Activity写法 下面给出了一个例子,让我们一起看一下,以传统的编程方式是如何实现一个典型的Android A
问题内容: 作为Java开发人员,我已经习惯了在应用程序中使用依赖项注入。但是对于Android,我尤其对性能保持警惕。在Android应用中使用Guice对性能有何影响?我认为会有一些开销,但是是否足够重要,我应该避免使用Guice? 我对它的使用可能只是将一些共享对象注入到各种活动中。 问题答案: 从版本3开始,Guice缓存反射对象以提高性能。至少有一个针对dalvik的错误可以使注解查找更
Animal.java 我为它创建了以下自定义断言: AnimalAssert.java 编辑:基于第一个答案(cglib需要一个),我用一个no arg构造函数更新了动物类,但是抛出了相同的异常
我的应用程序一直在许多Android平台上报告这个问题(4.1、4.0.4、2.3.6.…)。但我无法在我的手机上复制这个问题。我已经在Google上搜索了这个问题,但堆栈跟踪似乎与我的不一样。
我有一台带有Intel CPU的Windows机器(在引导菜单上启用VMX)。我使用VirtualBox在上面运行Ubuntu Guest。我在上面运行qemu,以运行另一个Guest OS,使用kvm(选项)。 我在尝试插入kvm-intel模块时收到以下错误: 我已经检查了来宾操作系统中的vpx标志,但我也没有看到 有没有办法在来宾Ubuntu操作系统中启用kvm支持,以便我可以在Ubuntu
我试图从java程序中使用Spark SQL,其中pom.xml中的依赖关系指向Spark版本1.6.0。下面是程序 但是,我在线程“main”java.lang.nosuchmethoderror:org.apache.spark.sql.sqlcontext.sql(ljava/lang/string;)lorg/apache/spark/sql/dataframe中出现异常;我正在创建一个平
主机系统为ARCHLinux。我想开发需要运行Windows docker容器的.NET4.6.1应用程序。所以我在VirtualBox下运行Win10。然后我在Win10中安装Docker,以运行Windows Docker容器。Linux->VirtualBox->Win10->Docker->Windows Docker容器->要运行的应用程序。 或者更具体地说,VirtualBox是否支持
问题内容: 我正在尝试根据此教程在我的应用程序中实现NotificationListenerService:http : //www.kpbird.com/2013/07/android- notificationlistenerservice.html ,但是调用getActiveNotifications时出现NullPointerException。 我正在向该服务发送广播,该广播应生成所有
问题内容: 因此,我正在构建一个minecraft插件,该插件的一部分从mysql抓取一堆数据块,并在服务器启动时将其加载到缓存中。我有一些代码可以在Eclipse测试用例中正常运行。但是,当我在本地Minecraft服务器中加载插件时,出现了异常。 抛出异常的代码。 是从执行查询返回的实例。 只是返回一个 片段稍大…并不是真的可以显示其他内容。 我看过网上有人说要修复,我需要包括ojdbc6.j