Android RoboGuice 使用指南(1):概述
来源:互联网 发布:灌砂法压实度试验算法 编辑:程序博客网 时间:2024/05/22 15:48
在开发应用时一个基本原则是模块化,并且近最大可能性地降低模块之间的耦合性。在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 );
- }
- }
如果使用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 );
- }
- }
- Android RoboGuice 使用指南(1):概述
- Android RoboGuice 使用指南(1):概述
- Android RoboGuice 使用指南1
- Android RoboGuice 使用指南(3):Bindings 概述
- Android RoboGuice 使用指南2
- Android RoboGuice 使用指南3
- Android RoboGuice 使用指南
- Android RoboGuice 使用指南(13):RoboGuice 功能描述
- Android RoboGuice 使用指南(11): Scopes
- Android RoboGuice 使用指南(4):Linked Bindings
- Android RoboGuice 使用指南(5):Binding Annotations
- Android RoboGuice 使用指南(6):Instance Bindings
- Android RoboGuice 使用指南(7):@Provides Methods
- Android RoboGuice 使用指南(8):Provider Bindings
- Android RoboGuice 使用指南(9):Untargetted Bindings
- Android RoboGuice 使用指南(14):Inject View
- Android RoboGuice 使用指南(15):Inject Context
- Android RoboGuice 使用指南(16):Standard Injection
- Vim 复制粘贴探秘
- [数据结构] 图的邻接矩阵广度优先搜索
- CentOS下安装SecureCRT的sz/rz工具包
- 基于mt7620的newifi y1的Pandorabox新软件源备忘
- c语言-数据类型-基本数据类型
- Android RoboGuice 使用指南(1):概述
- max()函数的高级用法
- 源码推荐(12.29):10秒钟快速集成下拉刷新和上拉加载,多行可滑动action sheet
- flex list拖拽 calculateDropIndex方法的使用
- Yii 字段缓存 SHOW FULL COLUMNS
- 黑马程序员—if、switch、for、while语句
- Android利用Fiddler进行网络数据抓包
- 算法系列笔记5(扩展数据结构-动态顺序统计和区间树)
- JS遍历所有checkbox是否选中