在开发应用时一个基本原则是模块化,而且近最大可能性地下降模块之间的耦合性。在Java平台上Spring Framework 以及.Net 平台 CAB ,SCSF 和Prism (WPF,Silverlight)中都有对Dependency injection 的支持。 html
Dependency injection 大大下降了类之间的依赖性,能够经过annotation (Java)或是SeviceDepdendcy (.Net) 描述类之间的依赖性,避免了直接调用相似的构造函数或是使用Factory来参加所需的类,从而下降类或模块之间的耦合性,以提升代码重用并加强代码的可维护性。 app
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库来完成。好比: wordpress
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 测试