1. 程式人生 > >依賴注入ButterKnife,Android Annotations,Dagger2

依賴注入ButterKnife,Android Annotations,Dagger2

為什麼使用開源框架

  • 1.提高開發速度
  • 2.提高開發質量

選擇開源框架的原則

  • 1.聚合性框架一定要放棄,例如Afinal,xUtils
    *大而全的框架容易導致牽一髮而動全身,可讀性差,偶合性高,難擴充套件.
  • 2.last commit超過一年以上或者issues一大堆沒有fix的框架不要用.
  • 3.選擇活躍度和人氣高的專案
  • ## 依賴注入

1.1依賴注入_概念

  • 依賴(Dependency)

    • 如果在ClassA中用到了ClassB的例項,我們通常會直接new一個ClassB的物件,這種情況稱為呼叫者ClassA對被呼叫者ClassB有一個依賴
    • 例如下面的程式碼中HRSystem就依賴與Person.
    • 示例程式碼中Person這種直接初始化的方式也叫Hard Init方式,弊端在於兩個類之間不夠獨立,如果我們更改了Person的建構函式,
      所有使用到Person初始化方法的程式碼都要進行修改.

      public class HRSystem {
      
          public static void main(String[] args) {
              Person person = new Person();
      
          }
      }
      
  • 依賴注入(DI:Dependency Injection):

    • 指程式執行過程中,呼叫者(HRSystem)需要被呼叫者(Person)的輔助,但是建立被呼叫者(Person)的工作不再由呼叫者(HRSystem)來完成,
      因此稱為控制反轉(IOC:Inversion of Control)

      ,而是由相關的容器控制程式將被呼叫者(Person)的物件在外部創建出來並注入到呼叫者(HRSystem)的引用中

      public class HRSystem {
      
          @Inject
          Person person;
      
          public static void main(String[] args) {
          }
      }
      
  • 為什麼要使用依賴注入

    • 依賴注入是實現控制反轉的方式之一(另一方式是依賴查詢),目的就是為了讓呼叫者和被呼叫者之間解耦
    • 可以注入依賴的模擬實現,使得測試變得更加簡單.

1.2依賴注入_Butterknife

  • 用途: 主要用來簡化各種初始化控制元件的操作
  • 配置:

    1. 在app/build.gradle檔案中dependencies節點新增如下程式碼
      • compile ‘com.jakewharton:butterknife:7.0.1’
      • compile ‘com.jakewharton:butterknife:8.4.0’
    2. 在Android Studio中點選 File–>Settings–>Plugins–>Browse repositories,搜尋Android ButterKnife Zelezny外掛,安裝成功以後重啟Android Studio.
    3. 在佈局檔案中新增控制元件的時候,所有需要在Activity/Fragment程式碼中進行控制的控制元件都要新增id屬性
    4. 在Activity/Fragment 程式碼中,將滑鼠放在佈局檔案的引用上(即R.layout.activity_main中的activity_main上面),此時按快捷鍵Alt + Insert或滑鼠右鍵
      選擇Generate
    5. 在彈出的選單中選擇Generate ButterKnife Injections,此時會再次彈出一個對話方塊
    6. 新的對話方塊中點選confirm後直接生成控制元件的引用,代替findViewById
    7. 如果需要處理控制元件的點選事件,可以選擇對應控制元件的OnClick複選框.
    8. 如果是ListView的Item檢視,還可以選擇左下角的Create ViewHolder複選框,生成ViewHolder靜態類.
  • 技巧

    • 在AndroidStudio\plugins\android\lib\templates\gradle-projects\NewAndroidModule\recipe.xml.ftl中新增如下程式碼,以後新建立的工程預設會新增
      Butterknife依賴:

      <dependency mavenUrl="com.jakewharton:butterknife:7.0.1" />
      

1.3依賴注入_AndroidAnnotations

  • 用途:
    1. 使用依賴注入Views,extras,System Service,resources
    2. 簡化執行緒模型
    3. 事件繫結
    4. REST Client
  • 配置:

    1. 在project/build.gradle 檔案中按下圖所示新增程式碼:

          mavenCentral()
          classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
          mavenCentral()
          mavenLocal()
      

      logo

    2. 在app/build.gradle 檔案中按下圖所示新增程式碼:

          apply plugin: 'android-apt'
          apt {
              arguments {
                  androidManifestFile variant.outputs[0]?.processResources?.manifestFile
              }
          }
          apt "org.androidannotations:androidannotations:4.0.0"
          compile "org.androidannotations:androidannotations-api:4.0.0"
      

      logo

  • 注意事項:

    * Manifest中註冊的activity要在原類名後追加下劃線”_”
    * 使用註解的控制元件和方法不能使用private修飾符  
    * 大型專案並不適用
    

1.4依賴注入_Dagger2

  • 歷史:

    • Dagger2的優點
      • 沒有使用反射,圖的驗證、配置和預先設定都在編譯的時候執行
      • 容易除錯,完全具體地呼叫提供和建立的堆疊
      • 更高的效能,谷歌聲稱他們提高了13%的處理效能
      • 程式碼混淆,使用派遣方法,就如同自己寫的程式碼一樣
  • 配置:

    1. 在project/build.gradle 檔案中按下圖所示新增程式碼: classpath ‘com.neenbedankt.gradle.plugins:android-apt:1.8’
      icon
    2. 在app/build.gradle 檔案中按下圖所示新增程式碼:

      * apply plugin: 'com.neenbedankt.android-apt'
      * compile 'com.google.dagger:dagger:2.2'
      * apt 'com.google.dagger:dagger-compiler:2.2'
      * provided 'org.glassfish:javax.annotation:10.0-b28'
      

      Logo

  • 主要的註解:

    • @Provides: 用來修飾方法,方法的返回型別就是所提供的依賴型別,可以簡單的把方法的返回值理解為我們通常要new出來的物件.
      • @Provides方法都會用provide作為字首
    • @Module: 所有的@Provides方法都必須放到一個Moudle中,一個Moudle就是使用@Moudle修飾的類,可以簡單的理解為一個持有各種
      物件的倉庫.用來給@Component元件提供例項化的物件.
      • Android中有三種Module:ApplicationModule,ActivityModule,UserModule,分別提供整個應用級別的(只生成一個該元件的例項),
        Activity級別的,使用者級別的Module。
      • @Module類都用Module作為字尾
    • @Inject: 通常在需要依賴的地方使用這個註解,簡單的理解為宣告一個物件
    • @Component 它是@Inject和@Module的橋樑,它的主要作用就是連線這兩個部分.
      • 我們必須用@Component註解一個介面,為該註解傳入Module類,或者新增其依賴的元件
      • @Component註解的介面或抽象類以Component為字尾
    • @Component的實現類
      • @Component註解的介面或抽象類,Dagger將會為該介面或者抽象類生成一個實現,這個實現的命名是在介面或抽象類前面加上Dagger,如MyComponent生成的實現是DaggerMyComponent
  • 使用步驟:

    1. 建立Module,並在其中建立Provides.示例程式碼:

      @Module
      public class MainActivityModuel {
      
          @Provides
          User provideUser(){
              return  new User("zhangsan", 12,"18612345678");
          }
      }
      
    2. 建立Component.示例程式碼:

      @Component(modules = MainActivityModuel.class)
      public interface MainActivityComponent {
          void inject(MainActivity activity);
      }
      
    3. Rebuild工程,生成對應的以Dagger開始的工具類

    4. 利用對應的以Dagger工具類初始化,並注入物件.示例程式碼:

      public class MainActivity extends AppCompatActivity {
          @Inject
          User user;
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              MainActivityComponent component = DaggerMainActivityComponent.builder().mainActivityModuel(new MainActivityModuel()).build();
              component.inject(this);
          }
      }
      

相關推薦

依賴注入ButterKnife,Android Annotations,Dagger2

為什麼使用開源框架 1.提高開發速度 2.提高開發質量 選擇開源框架的原則 1.聚合性框架一定要放棄,例如Afinal,xUtils *大而全的框架容易導致牽一髮而動全身,可讀性差,偶合性高,難擴充套件. 2.last commit超過一年以上或者

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

若對依賴注入不熟悉,請閱讀部落格中的另外一篇IOC控制反轉淺析 介紹:ButterKnife是Square公司員工JakeWharton開發的一款針對View檢視物件的依賴注入庫。目的是通過依賴注入方式,將View物件的初始化簡化,並極大地改進了程式碼之間的耦

依賴注入ButterKnife

        在Android開發中,需要大量的編寫初始化佈局、點選事件、監聽事件等一些簡單重複的程式碼,會無形中浪費時間和精力。而使用ButterKnife這個開源庫可以讓我們從大量的findViewById()和setOnclicktListener()中解放出來。

Android單元測試(6):使用dagger2來做依賴注入

注: 1. 程式碼中的 //<= 表示新加的、修改的等需要重點關注的程式碼 2. Class#method表示一個類的instance method,比如 LoginPresenter#login 表示 LoginPresenter的login(非靜態)方法。 問題

android依賴注入框架Dagger和Butterknife實戰

依賴注入(DependencyInjection):在類A中要用到一個B的物件(依賴),需要通過新建B的例項或其他一些主動的方式來獲取物件,然後才能呼叫。而通過外部的方式自動將B的物件分配給A(注入),實現相對被動的獲取物件,這個過程稱為依賴注入。 依賴注入的一些需要理解

Androiddagger2讓你愛不釋手-基礎依賴注入框架篇

前言dagger2的大名我想大家都已經很熟了,它是解決Android或java中依賴注入的一個類庫(DI類庫)。當我看到一些開源的專案在使用dagger2時,我也有種匆匆欲動的感覺,因此就立馬想一探它的究竟,到底能給我帶來怎樣的好處。在學習使用dagger2的過程中,我遇到了以下的一些困惑:dagger2中的

Android ButterKnife依賴注入框架簡單使用

Butter Knife 通過註解的方式,將Android View與成員變數和方法繫結起來,為你形成一種模板樣式的程式碼。 在成員變數上使用@BindView替換掉 findView

Android快速依賴注入框架Dagger2使用1

一、啥是Dagger2 Dagger2的內容有點多,一點得有耐心。 1.1 簡介 Dagger2是一個Android/Java平臺上快速依賴注入框架,由谷歌開發,最早的版本Dagger1 由Square公司開發。依賴注入框架主要用於模組間解耦,提高程式

Android依賴注入框架二、ButterKnife

簡述: ButterKnife 是出自Android大神JakeWharton之手的一個開源庫,它的作用就是通過註解繫結檢視的方法,從而簡化程式碼量。 題外話: Java中Spring提供ioc的功能,而且Spring的HttpInvoker可以實現直接呼叫後端的物件。

android開源庫---Dagger2學習準備(依賴注入

我這次準備介紹的是Dagger2的使用。 那麼學習這個之前我要做下準備就是了解為什麼要使用這個,那麼我們就必須要先了解一下什麼是依賴注入。 什麼是依賴注入 依賴注入控制反轉的一種實現方式。 控制反轉即IoC (Inversion of Control

秒懂依賴注入Dagger2 的實用技能(如何在Android中使用)

前言 古人曰:紙上得來終覺淺,絕知此事要躬行,這話說的是真他孃的有道理啊,對於程式設計那點事似乎更是真理。2016年的時候就首次瞭解過dagger,但是沒有去編碼實現,當時哥們真覺得懂了,但是最近有個專案要使用Dagger2,突然發現還是不知道如

Android依賴注入框架Dagger2學習筆記

依賴注入 面向物件程式設計的一種設計模式,目的是為了降低程式中類與類之間的依賴引起的耦合。 在Java中,依賴注入有 通過介面注入 通過set方法注入 通過構造方法注入 通過註解注入 Dagger2 官網 為什麼要

Andriod Dagger2依賴注入

Andriod Dagger2依賴注入 學習Dagger首先要了解什麼是依賴注入(Dependency Injection),為什麼需要依賴注入,瞭解這些以後就可以進入Dagger的學習,現在大部分的專案都在使用Dagger2,我們先就Dagger2進行學習,慢慢了

依賴注入框架-ButterKnife使用方法總結

ButterKnife 2018-9-6 10:45 - QG2017移動組 - 張藝雋 ButterKnife是JakeWharton大神出品的用於View的注入框架。提供註解來簡單快捷地完成View的繫結、點選事件的分離等。 來自官方的說明

依賴注入框架Dagger2—1.入門

1.依賴注入 1.1.什麼是依賴? 如果在 Class A 中,有 Class B 的例項,則稱 Class A 對 Class B 有一個依賴。 例如下面類 A 中用到一個 B 物件,我們就說類 A 對類 B 有一個依賴。 同時,這也是一個典型的"依賴非注入

依賴注入框架Dagger2—2.各註解用法

0.前言 接上一篇入門文章,這篇主要是各屬性實戰。 1.Dagger2各屬性瞭解 必要屬性 @inject//注入,@Component,@Moudle,@Provider 為什麼說這個幾個是必要屬性,因為只要想用dagger2這幾個屬性是繞不開的。 高階屬

dagger2 讓你愛不釋手:基礎依賴注入框架篇

前言 dagger2的大名我想大家都已經很熟了,它是解決Android或java中依賴注入的一個類庫(DI類庫)。當我看到一些開源的專案在使用dagger2時,我也有種匆匆欲動的感覺,因此就立馬想一探它的究竟,到底能給我帶來怎樣的好處。在學習使用dagger2的過程中,我遇到了

依賴注入Dagger2

1.依賴 如果在 Class A 中,有 Class B 的例項,則稱 Class A 對 Class B 有一個依賴。例如下面類 Human 中用到一個 Father 物件,我們就說類 Human 對類 Father 有一個依賴。 public class

Android依賴注入框架三、AndroidAnnotations

AndroidAnnotations是一個能夠讓你快速進行Android開發的開源框架,它能讓你專注於真正重要的地方。使程式碼更加精簡,使專案更容易維護。相比原生的Android App程式碼量,幾乎可以少一半。 用com.github.barteksc:and

淺析android中的依賴注入

     這幾年針對Android推出了不少View注入框架,例如ButterKnife。我們首先來了解一下使用這些框架有什麼好處,其實好處很明顯:它可以減少大量的findViewById以及setOnClickListener程式碼,簡化了程式碼,讓我們的程式碼看起來條理