Android中的DI(依赖注入)框架--RoboGuice

来源:互联网 发布:阿里云ubuntu镜像下载 编辑:程序博客网 时间:2024/05/17 09:22

RoboGuice是应用于Android开发中的DI(依赖注入)框架,基于 Google 自己的Guice库.如果你曾接触过Spring框架(Java开发中三大框架之一,现在甚至比J2EE都流行)或Guice框架,你就应该知道这种开发模式的便捷之处了。


先来看一下典型Android中的Activity代码:

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 );       }   } 

这段代码共19行。如果你从onCreate读起的话,你会发现超过5行的代码是在进行死板无脑的初始化,然后才能看到这唯一一行有意义的代码name.setText().而且越是复杂的Activity,这种冗余的初始化代码越多。

下面再来看一下使用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 );       }   } 
在这个例子中,onCreate()方法一览无余,所有模板式的初始化被分离开,只留下程序中真正的逻辑模块。你需要一个系统服务么?注入一个。你需要一个View或者Resource么?也注入一个。RoboGuice 帮你实现这些细节。

RoboGuice 的目的就是让你的代码更关注于应用,而不是初始化、维护生命周期等工作。

文档的简单介绍当然是不足够满足大家的,只是对RoboGuice有了浅浅的了解,学习更多,可以看它所提供的例子,项目源码here

(前段时间经同事推荐接触了Afinal,才对Android开发的依赖注入有了一定了解,因此准备学习一下,后又发现actionbarSherlock包中的AstroboyMasterConsole使用的roboguice库和afinal中的DI很像,因此拿来跟大家分享,有兴趣的朋友可以跟我交流)


原创粉丝点击