1. 程式人生 > >Android開源框架——依賴注入ButterKnife

Android開源框架——依賴注入ButterKnife

若對依賴注入不熟悉,請閱讀部落格中的另外一篇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' }

注意:

  1. apply plugin: ‘android-apt’必須新增
  2. 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... } }