Android開源框架——依賴注入ButterKnife
阿新 • • 發佈:2019-01-28
若對依賴注入不熟悉,請閱讀部落格中的另外一篇IOC控制反轉淺析
介紹:ButterKnife是Square公司員工JakeWharton開發的一款針對View檢視物件的依賴注入庫。目的是通過依賴注入方式,將View物件的初始化簡化,並極大地改進了程式碼之間的耦合度。
特點
- 用預編譯方法替代了反射機制(注意:反射機制極大地浪費資源,包括空間與時間資源)
- 在編譯的過程中就建立了檢視物件,編譯採用的是Annotation編譯器
- IOC容器從xml佈局檔案中,將物件取出分配給元件中物件的引用(這也是依賴注入的精髓)
優勢
- 使用@BindView註解,刪除findViewById呼叫
- 將多個檢視組合在一起,然後一次性呼叫動作,設定,屬性
- 使用@onClick方式,刪除了監聽器的匿名內部類
- 使用資源註解方式,刪除了資源查詢的呼叫
安裝
project-level build.gradle:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
}
module-level build.gradle:
apply plugin: 'android-apt'
android {
...
}
dependencies {
compile 'com.jakewharton:butterknife:8.0.1'
apt 'com.jakewharton:butterknife-compiler:8.0.1'
}
注意:
- apply plugin: ‘android-apt’必須新增
- com.jakewharton:butterknife-compiler:8.0.1必須新增,否無無法預編譯,即程式中會報空物件
例如:
class ExampleActivity extends Activity {
@BindView(R.id.user) EditText username;
@BindView (R.id.pass) EditText password;
@BindString(R.string.login_error) String loginErrorMessage;
@OnClick(R.id.submit) void submit() {
// TODO call server...
}
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple_activity);
ButterKnife.bind(this);
// TODO Use fields...
}
}