老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

Android中怎么利用Dagger2實現依賴注入

本篇文章為大家展示了Android中怎么利用Dagger2實現依賴注入,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

成都創新互聯公司是一家專注于成都網站設計、成都網站制作與策劃設計,婁星網站建設哪家好?成都創新互聯公司做網站,專注于網站建設10年,網設計領域的專業建站公司;建站業務涵蓋:婁星等地區。婁星做網站價格咨詢:18982081108

1. Dagger2 基礎

注解講解:

  • @Module這個annotation修飾的類專門用來提供依賴

  • @Provides這個annotation修飾的方法用在Module類里

  • @Inject用來annotation一個依賴(可以是構造方法、field或者一般的方法)

  • @Component連接@Module和注入的橋梁

這些名詞看起來非常抽象。下面稍微解釋一下。依賴反射并沒有什么神奇的地方。只不過是我們需要單獨寫初始化依賴的地方由其他的框架代替了。這個依賴關系也有我們常寫的代碼轉移到了“配置文件”中。

在很久以前,依賴注入的框架就是這樣處理依賴注入的:讀取配置文件的依賴關系,然后用反射的方法初始化被依賴對象并賦值給調用依賴的對象。比如,我們之前在悟空類中初始化金箍棒:

public class Wukong {     private Jingubang jingubang;      public Wukong(){         // 依賴         this.jingubang = Jingubang();     } }

后來有了使用配置文件的依賴注入(這里都是虛構的文件格式):

                                          

在悟空使用金箍棒的時候,依賴注入框架自動初始化好了金箍棒,并賦值給了悟空。

現在使用Dagger2。這里就有不得不說的牛X的地方了。因為是在Android里能用的資源沒有后端那么多。尤其反射消耗比較大!所以Dagger為了滿足移動開發節約資源的需要,沒有使用反射實現依賴注入。而是在編譯的時候同時生成依賴注入的相關代碼。生成代碼的根據就是前文中說明的那些注解(annotation)以及使用這些annotation的類、接口。

總結起來就一句話,Dagger把你需要在悟空類里寫的金箍棒類的初始化代碼都根據注解替你自動生成了!只不過這種生成的代碼比明晃晃的使用new初始化的方法更加復雜一些。

Dagger2 開發步驟

把大象裝冰箱一共分幾步:

  1. 定義依賴和被依賴的對象的類,悟空類和金箍棒類?!拔蚩疹悺焙汀敖鸸堪纛悺钡臉嬙旌瘮涤聾Inject注解修飾。

  2. 定義一個@Module注解的類,一般叫做XXXModule。里面寫的@Provides注解修飾的方法。這些@Provides方法返回“悟空類”和“金箍棒類”對象。比如@Provides  Wukong provideWukong(){ return new Wukong(); }

  3. 創建一個interface,并用@Component注解修飾。一般叫做XXXComponent。里面寫一個注入方法:void inject(Wukong  wk);。這里Wukong只是一個例子。任何你準備要注入的類都可以代替上面參數的Wukong類。

  4. 在需要注入的地方寫@Inject的field。

***,Dagger會根據上面的內容和***的@Component接口生成一個DaggerXXXComponent的類型,使用這個類型來實現注入。上面的1到3步可以理解為依賴的配置。***的XXXComponent代替古老的Reflect方式實現注入。

***步的@Inject修飾的構造函數和`@Module`的`provideXXX`方法二者可以省略一個。

Dagger可以根據其中的任意一種配置創建依賴的對象。都寫上等于有了雙保險。

上文提到過多次。Dagger 2厲害的地方就在于這個庫完全不用反射,而是用在編譯期生成代碼的方式實現的依賴注入。這個特點導致在Android  Studio配置的時候需要做一些額外的工作。

這里假設你已經創建了一個新的Android應用項目。下面打開build.gradle文件,我們一步一步的來完成Dagger2的配置。

3. Android Studio的配置

***步

apply plugin: 'kotlin-android' // 非必須  apply plugin: 'kotlin-android-extensions' // 必須!!!

為什么要加一個新的plugin呢?這個是為后面使用的kapt和provided提供支持的。gradle本身不支持這兩個操作。

第二步

buildscript {     ext.kotlin_version = '1.0.1-2'     repositories {         mavenCentral()     }     dependencies {         classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"         classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"     } }

第三步

dependencies {     // ...其他略...     compile 'com.google.dagger:dagger:2.2'     kapt 'com.google.dagger:dagger-compiler:2.2'     provided 'javax.annotation:jsr250-api:1.0' }
  • dagger, 我們要用的正主。

  • dagger-compiler, 用來生成代碼。

  • java.annotation, 提供Dagger意外的注解

***,同步Gradle。

使用Dagger 2

下面就是Dagger一展身手的時候了。

首先,我們已經有悟空和金箍棒了。代碼如下:

悟空:

import javax.inject.Inject;  /**  * Created by uncle_charlie on 6/4/2016.  */ public class Wukong {      @Inject     JinGuBang jinGuBang;      @Inject     public Wukong() {      }      public String useJinGuBang() {         return this.jinGuBang.use();     } }

金箍棒:

import javax.inject.Inject;  /**  * Created by uncle_charlie on 6/4/2016.  */ public class JinGuBang {      @Inject     public JinGuBang() {      }      public String use() {         return "user Jing gu bang";     } }

悟空對金箍棒有依賴,所以金箍棒屬性有@Inject注解修飾。

因為兩個類都需要Dagger創建,所以在構造函數上都有@Inject注解。

第二步 創建@Module類

創建@Module注解的類,并在其中添加@Provides注解修飾的方法。這些方法創建被依賴的對象。

import dagger.Module; import dagger.Provides;  /**  * Created by uncle_charlie on 6/4/2016.  */ @Module public class XiYouModule {     @Provides //    @Singleton     Wukong provideWukong() {         return new Wukong();     }      @Provides //    @Singleton     JinGuBang provideJinGuBang() {         return new JinGuBang();     } }
  • @Singleton注解表明,這個被依賴的對象在應用的生命周期里只有一個實例。

  • 這個里的@Provides方法和前一步說到的@Inject注解的構造函數兩個可以只寫一個。

第三步 @Component接口,連接@Module和@Inject

@Module和@Provides方法提供了被依賴的對象。@Inject在@Component接口出現的地方則是指明了需要注入的地方(一般是一個field)。@Component接口就是用來把他們連接起來的。

import android.app.Activity; import javax.inject.Singleton; import dagger.Component;  /**  * Created by uncle_charlie on 6/4/2016.  */ @Component(modules = {XiYouModule.class}) @Singleton public interface XiYouComponent {     void inject(Wukong wk);     void inject(Activity a); }

其中inject()方法里使用的對象,就是包含@Inject的field的需要注入的對象。

在這個接口中也可以不用inject()方法,而使用provideXXX()方法后面會有更多介紹。

注意:@Component接口一定要在直接中指明@Module類型

第四步 使用@Component接口獲取對象

經過前面的步驟,依賴和被依賴對象關系都已經配置好了。下面就來獲取被依賴對象來注入依賴對象。

public class MainActivity extends AppCompatActivity {     private static final String TAG = "##MainActivity";      @Inject     Wukong wukong;      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);          TextView welcomeTextView = (TextView) findViewById(R.id.welcome_textview);         // 1         XiYouComponent xiYouComponent = DaggerXiYouComponent                 .builder()                 // 2                 .xiYouModule(new XiYouModule())                 .build();         xiYouComponent.inject(this);         // 3         welcomeTextView.setText(wukong.useJinGuBang());     } }

首先主要到屬性@Inject Wukong wukong;已經在MainActivity  聲明了。這里表明一個依賴關系:這個activity依賴于悟空,并準備注入悟空對象。

  1. Dagger2會在編譯器自動生成依賴注入的代碼,所以在添加上面的代碼之前需要編譯一下。DaggerXiYouComponent就是Dagger根據我們的XiYouModule類生成的代碼。

  2. 在這一步給DaggerXiYouComponent的builder添加XiYouModule的實例。如果這個Module只需要用到無參構造函數的話可以用一種省略用法:create()方法??梢院唽憺椋?/p>

DaggerXiYouComponent                 .builder()                 // 2                 //.xiYouModule(new XiYouModule())                 //.build()                 .create();

Component接口的對象調用inject(this)方法之后注入即完成。所以可以直接使用@Inject Wukong  wukong;屬性來調用方法:welcomeTextView.setText(wukong.useJinGuBang());***在activity中顯示方法返回的文字。

上述內容就是Android中怎么利用Dagger2實現依賴注入,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注創新互聯行業資訊頻道。


標題名稱:Android中怎么利用Dagger2實現依賴注入
文章位置:http://www.xueling.net.cn/article/jgoppe.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 中文无码AV一区二区三区 | 手机永久无码国产AV毛片 | 亚洲第一综合最大av | 国产一区二区极品 | 亚洲精品欧美激情 | 成人在线免费看 | 性姿势108式大全 | 成年人网站在线免费看 | 99久久婷婷国产综合精品 | 色欧美视频 | 欧美一级播放 | 欧美日韩国产在线一区 | 成人亚洲a片v一区二区三区网址 | 日本免费一区二区三区视频 | 日本人又黄又爽又大又色 | 成人自拍视频在线观看 | 国产自啪精品视频网站丝袜 | 久久午夜精品影院一区 | 国产不卡视频在线播放 | 黄色在线观看免费视频 | 久久夜色精品亚洲 | 桃花视频大全不卡免费观看网站 | 日韩免费观看av | 国产精品奇米一区二区三区小说 | 疯狂做受XXXX国产 | 超碰在线免费公开 | 一级视频在线观看免费 | 亚洲日韩国产一区二区三区 | 国产成人无码A区在线观看免费 | 国产人碰人摸人爱视频 | 青楼妓女禁脔道具调教SM | 女人喷液全过程在线观看 | www.日本高清视频 | 久久精品福利网站免费 | 国产妇女视频大全 | 日本韩国最新免费观看 | 日韩一区二区免费看 | 免费av资源在线观看 | 99毛片 | 亚洲草片 | 日韩精品无码免费毛片 |