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很像,因此拿来跟大家分享,有兴趣的朋友可以跟我交流)