精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

安卓平臺(tái)上的依賴注入(一)

移動(dòng)開(kāi)發(fā) Android
要注入依賴,首先需要告訴框架我們能提供什么(比如說(shuō)上下文)以及特定的對(duì)象應(yīng)該怎樣創(chuàng)建。為了完成注入,我們用 @Module 注釋對(duì)一個(gè)特殊的類進(jìn)行了注解(這樣 Dagger 就能識(shí)別它了),尋找 @Provide 注解的方法,生成圖表,能夠返回我們所請(qǐng)求的對(duì)象。

剛開(kāi)始學(xué)習(xí)軟件工程的時(shí)候,我們經(jīng)常會(huì)碰到像這樣的事情:

軟件應(yīng)該符合 SOLID 原則。

但這句話實(shí)際是什么意思?讓我們看看 SOLID 中每個(gè)字母在架構(gòu)里所代表的重要含義,例如:

  • S - 單職責(zé)原則
  • O - 開(kāi)閉原則
  • L - Liskov 替換原則
  • I - 接口分離原則
  • D - 依賴反轉(zhuǎn)原則 這也是依賴注入(dependency injection)的核心概念。

簡(jiǎn)單來(lái)說(shuō),我們需要提供一個(gè)類,這個(gè)類有它所需要的所有對(duì)象,以便實(shí)現(xiàn)其功能。

[[180033]]

概述

依賴注入聽(tīng)起來(lái)像是描述非常復(fù)雜的東西的一個(gè)術(shù)語(yǔ),但實(shí)際上它很簡(jiǎn)單,看下面這個(gè)例子你就明白了:

  1. class NoDependencyInjection { 
  2.   private Dependency d; 
  3.   public NoDependencyInjection() { 
  4.     d = new Dependency(); 
  5.   } 
  6. class DependencyInjection { 
  7.   private Dependency d; 
  8.   public DependencyInjection(Dependency d) { 
  9.     this.d = d; 
  10.   } 

正如我們所見(jiàn),***種情況是我們?cè)跇?gòu)造器里創(chuàng)建了依賴對(duì)象,但在第二種情況下,它作為參數(shù)被傳遞給構(gòu)造器,這就是我們所說(shuō)的依賴注入(dependency injection)。這樣做是為了讓我們所寫(xiě)的類不依靠特定依賴關(guān)系的實(shí)現(xiàn),卻能直接使用它。

參數(shù)傳遞的目標(biāo)是構(gòu)造器,我們就稱之為構(gòu)造器依賴注入;或者是某個(gè)方法,就稱之為方法依賴注入:

  1. class Example { 
  2.   private ConstructorDependency cd; 
  3.   private MethodDependency md; 
  4.   Example(ConstructorDependency cd) { 
  5.     this.cd = cd; //Constructor Dependency Injection 
  6.   } 
  7.   public setMethodDependency(MethodDependency md) { 
  8.     this.md = md; //Method Dependency Injection 
  9.   } 

要是你想總體深入地了解依賴注入,可以看看由 Dan Lew 發(fā)表的精彩的演講,事實(shí)上是這個(gè)演講啟迪了這篇概述。

在 Android 平臺(tái),當(dāng)需要框架來(lái)處理依賴注入這個(gè)特殊的問(wèn)題時(shí),我們有不同的選擇,其中最有名的框架就是 Dagger 2。它最開(kāi)始是由 Square 公司(LCTT 譯注:Square 是美國(guó)一家移動(dòng)支付公司)的一些很棒的開(kāi)發(fā)者開(kāi)發(fā)出來(lái)的,然后慢慢發(fā)展成由 Google 自己開(kāi)發(fā)。首先開(kāi)發(fā)出來(lái)的是 Dagger 1,然后 Big G 接手這個(gè)項(xiàng)目發(fā)布了第二個(gè)版本,做了很多改動(dòng),比如以注解(annotation)為基礎(chǔ),在編譯的時(shí)候完成其任務(wù)。

導(dǎo)入框架

安裝 Dagger 并不難,但需要導(dǎo)入 android-apt 插件,通過(guò)向項(xiàng)目的根目錄下的 build.gradle 文件中添加它的依賴關(guān)系:

  1. buildscript{ 
  2.   ... 
  3.   dependencies{ 
  4.     ... 
  5.     classpath ‘com.neenbedankt.gradle.plugins:android-apt:1.8’ 
  6.   } 

然后,我們需要將 android-apt 插件應(yīng)用到項(xiàng)目 build.gradle 文件,放在文件頂部 Android application 那一句的下一行:

  1. apply plugin: ‘com.neenbedankt.android-apt’ 

這個(gè)時(shí)候,我們只用添加依賴關(guān)系,然后就能使用庫(kù)及其注解(annotation)了:

  1. dependencies{ 
  2.     ... 
  3.     compile ‘com.google.dagger:dagger:2.6’  
  4.     apt ‘com.google.dagger:dagger-compiler:2.6’ 
  5.     provided ‘javax.annotation:jsr250-api:1.0’ 

需要加上***一個(gè)依賴關(guān)系是因?yàn)?@Generated 注解在 Android 里還不可用,但它是原生的 Java 注解。

Dagger 模塊

要注入依賴,首先需要告訴框架我們能提供什么(比如說(shuō)上下文)以及特定的對(duì)象應(yīng)該怎樣創(chuàng)建。為了完成注入,我們用 @Module 注釋對(duì)一個(gè)特殊的類進(jìn)行了注解(這樣 Dagger 就能識(shí)別它了),尋找 @Provide 注解的方法,生成圖表,能夠返回我們所請(qǐng)求的對(duì)象。

看下面的例子,這里我們創(chuàng)建了一個(gè)模塊,它會(huì)返回給我們 ConnectivityManager,所以我們要把 Context 對(duì)象傳給這個(gè)模塊的構(gòu)造器。

  1. @Module 
  2. public class ApplicationModule { 
  3.   private final Context context; 
  4.   public ApplicationModule(Context context) { 
  5.     this.context = context; 
  6.   } 
  7.   @Provides @Singleton 
  8.   public Context providesContext() { 
  9.     return context; 
  10.   } 
  11.   @Provides @Singleton 
  12.   public ConnectivityManager providesConnectivityManager(Context context) { 
  13.     return (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
  14.   } 

Dagger 中十分有意思的一點(diǎn)是簡(jiǎn)單地注解一個(gè)方法來(lái)提供一個(gè)單例(Singleton),就能處理所有從 Java 中繼承過(guò)來(lái)的問(wèn)題。

組件

當(dāng)我們有一個(gè)模塊的時(shí)候,我們需要告訴 Dagger 想把依賴注入到哪里:我們?cè)谝粋€(gè)組件(Component)里完成依賴注入,這是一個(gè)我們特別創(chuàng)建的特殊注解接口。我們?cè)谶@個(gè)接口里創(chuàng)造不同的方法,而接口的參數(shù)是我們想注入依賴關(guān)系的類。

下面給出一個(gè)例子并告訴 Dagger 我們想要 MainActivity 類能夠接受 ConnectivityManager(或者在圖表里的其它依賴對(duì)象)。我們只要做類似以下的事:

  1. @Singleton 
  2. @Component(modules = {ApplicationModule.class}) 
  3. public interface ApplicationComponent { 
  4.   void inject(MainActivity activity); 

正如我們所見(jiàn),@Component 注解有幾個(gè)參數(shù),一個(gè)是所支持的模塊的數(shù)組,代表它能提供的依賴。這里既可以是 Context 也可以是 ConnectivityManager,因?yàn)樗鼈冊(cè)?ApplicationModule 類中有聲明。

用法

這時(shí),我們要做的是盡快創(chuàng)建組件(比如在應(yīng)用的 onCreate 階段)并返回它,那么類就能用它來(lái)注入依賴了:

為了讓框架自動(dòng)生成 DaggerApplicationComponent,我們需要構(gòu)建項(xiàng)目以便 Dagger 能夠掃描我們的代碼,并生成我們需要的部分。

在 MainActivity 里,我們要做的兩件事是用 @Inject 注解符對(duì)想要注入的屬性進(jìn)行注解,調(diào)用我們?cè)? ApplicationComponent 接口中聲明的方法(請(qǐng)注意后面一部分會(huì)因我們使用的注入類型的不同而變化,但這里簡(jiǎn)單起見(jiàn)我們不去管它),然后依賴就被注入了,我們就能自由使用他們:

  1. public class MainActivity extends AppCompatActivity { 
  2.   @Inject 
  3.   ConnectivityManager manager; 
  4.   @Override 
  5.   protected void onCreate(Bundle savedInstanceState) { 
  6.     ... 
  7.     ((App) getApplication()).getComponent().inject(this); 
  8.   } 

總結(jié)

當(dāng)然了,我們可以手動(dòng)注入依賴,管理所有不同的對(duì)象,但 Dagger 消除了很多比如模板這樣的“噪聲”,給我們提供有用的附加品(比如 Singleton),而僅用 Java 處理將會(huì)很糟糕。

責(zé)任編輯:龐桂玉 來(lái)源: Linux中國(guó)
相關(guān)推薦

2012-08-22 11:12:11

Ubuntu

2018-11-01 10:45:24

2022-01-21 10:35:03

Windows 11微軟安卓

2013-06-24 17:20:29

x86平臺(tái)優(yōu)化安卓x86

2013-12-12 16:23:53

安卓進(jìn)化AndroidGoogle

2022-12-29 08:54:53

依賴注入JavaScript

2023-06-27 08:58:13

quarkusBean

2009-01-16 09:10:39

JavaCRM系統(tǒng)企業(yè)應(yīng)用

2012-06-12 09:43:34

微軟Linux服務(wù)

2015-09-02 11:22:36

JavaScript實(shí)現(xiàn)思路

2011-05-31 10:00:21

Android Spring 依賴注入

2015-10-09 10:32:21

代碼依賴注入強(qiáng)心劑

2019-11-26 14:52:40

Linux工具寫(xiě)作者

2017-02-23 13:51:05

2010-12-22 21:52:12

rkhunter

2013-05-30 09:14:41

手游安卓平臺(tái)推廣

2015-07-13 09:21:27

2023-07-11 09:14:12

Beanquarkus

2024-05-27 00:13:27

Go語(yǔ)言框架

2021-01-22 06:35:44

IoCxml驅(qū)動(dòng)技術(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

久久久久久国产精品无码| 中文子幕无线码一区tr| 久久久国产精品免费| 九色91popny| 成人在线播放| 老牛国产精品一区的观看方式| 亚洲午夜色婷婷在线| 亚洲va在线va天堂va偷拍| 91极品在线| 九九九久久久精品| 91精品国产免费久久久久久 | 亚洲日本乱码在线观看| 国产久一道中文一区| 欧美日韩乱国产| 国产精品一国产精品| 欧美一级久久久久久久大片| 91成人在线观看喷潮教学| 98在线视频| 成人av网址在线| 91九色国产在线| 黑人精品无码一区二区三区AV| 国产乱论精品| 欧美高清精品3d| av无码久久久久久不卡网站| av网站大全在线观看| 成人午夜电影小说| 欧美在线激情视频| 青青草原在线免费观看视频| 精品国产乱码久久久久久蜜坠欲下| 911精品国产一区二区在线| www.com毛片| 成人影音在线| 亚洲精品高清视频在线观看| 日产中文字幕在线精品一区 | 日韩av有码在线| 日韩精品xxxx| 国内老司机av在线| 亚洲精品videosex极品| 亚洲不卡1区| xxxx18国产| 极品销魂美女一区二区三区| 国产精品美乳在线观看| 国产成人无码专区| 99亚洲视频| 欧美精品在线免费观看| 影音先锋男人资源在线观看| 国产麻豆精品久久| 亚洲国产精品电影在线观看| 涩涩网站在线看| 亚洲国产一区二区久久| 精品视频在线视频| 国产素人在线观看| 亚洲精品无码专区| 国产很黄免费观看久久| 成人欧美一区二区三区黑人孕妇| 樱花视频在线免费观看| 日韩 欧美一区二区三区| 国产精品成人品| 91黑人精品一区二区三区| 国产亚洲在线| 2021国产精品视频| 中文字幕国产在线观看| 久久精品男女| 国产91精品网站| 五月天中文字幕| 美女网站色91| 成人国产亚洲精品a区天堂华泰| 久草手机在线视频| 日韩中文字幕91| 国产精品普通话| 亚洲无码精品在线播放| 青草国产精品久久久久久| 海角国产乱辈乱精品视频| 久操视频免费在线观看| 日韩一级网站| 欧美在线视频播放| 亚洲一级在线播放| 免费在线看成人av| 91精品国产综合久久久久久蜜臀| 一区二区自拍偷拍| 极品少妇一区二区| 147欧美人体大胆444| 黄色www视频| 久久精品一区蜜桃臀影院| 亚洲人成网站在线观看播放| 成人三级黄色免费网站| 亚洲视频在线一区| 日本福利视频一区| 97成人超碰| 欧美亚洲综合网| 三上悠亚在线一区| 欧美经典影片视频网站| 日韩精品中文字| 亚洲一级二级片| 日韩午夜av| 国产精品成人免费视频| 国产精品久久久久久免费免熟 | 欧美精品网站| 久久久中文字幕| 亚洲第一区av| 成人精品小蝌蚪| 欧美亚洲另类在线一区二区三区| 日韩美女网站| 一区二区三区精密机械公司| 国产日韩一区二区在线观看| 国产精品一区二区美女视频免费看| 欧美大黄免费观看| 日韩网站在线播放| 午夜欧美理论片| 国产精品福利小视频| 亚洲国产精品成人久久蜜臀| 久久精品亚洲乱码伦伦中文| 在线成人性视频| 黄色亚洲网站| 精品电影一区二区| 性欧美videos| 日本不卡在线视频| 黄色99视频| 成人黄色在线电影| 在线观看视频91| 中国av免费看| 女同性一区二区三区人了人一| 国产99在线|中文| 亚洲精品国产手机| 日韩久久一区二区| 国产免费又粗又猛又爽| 欧美国产不卡| 欧美激情在线视频二区| 国产又粗又猛又爽| 欧美极品少妇xxxxⅹ高跟鞋| 免费特级黄色片| 粉嫩av一区二区三区四区五区| 国产偷亚洲偷欧美偷精品| 成人免费黄色小视频| 久久一区亚洲| 久久人人97超碰人人澡爱香蕉| 青青青草视频在线| 欧美一区二区三区色| 俄罗斯黄色录像| 欧美顶级大胆免费视频| 国产精品露脸av在线| 精品视频三区| 91成人在线免费观看| 亚洲成人精品在线播放| 国产精品亚洲二区| 欧美亚洲国产日本| 日本一区高清| 午夜成人在线视频| 在线免费观看a级片| 9久re热视频在线精品| 成人在线一区二区| 九七久久人人| 欧美一个色资源| 四虎成人免费影院| 美女网站一区二区| 国产日本欧美在线| 国色天香久久精品国产一区| 美乳少妇欧美精品| 亚洲va欧美va| 精品二区三区线观看| 大黑人交xxx极品hd| 午夜亚洲影视| 日本亚洲导航| 日本美女一区| 尤物九九久久国产精品的分类| 中文字幕有码视频| |精品福利一区二区三区| 日韩av片免费观看| 66视频精品| 国产精品免费在线播放| 中文字幕乱码在线播放| 亚洲精品美女久久久久| 六月丁香在线视频| 国产欧美日产一区| 天天操精品视频| 在线看片一区| 久久国产精品久久| 超级碰碰久久| 在线播放国产精品| 国产女同91疯狂高潮互磨| 亚洲一级电影视频| av网在线播放| 久久99这里只有精品| 韩国成人一区| 国产精品伊人| 欧美精品久久久久久久免费观看| 日本人妻熟妇久久久久久| 亚洲成av人片一区二区| 特大黑人巨人吊xxxx| 日韩不卡手机在线v区| 亚洲精品一区二区三区四区五区| 亚洲超碰在线观看| 欧洲日韩成人av| 国产不卡在线| 亚洲裸体xxxx| 一级黄色a毛片| 午夜国产不卡在线观看视频| 免费看黄色三级| 成人黄色网址在线观看| 国产九九在线观看| 一区二区三区在线| 国产在线资源一区| 日本美女久久| 2020久久国产精品| 欧美激情视频在线播放| 日韩成人黄色av| 伊人久久久久久久久久久久 | 国产午夜精品一区二区三区| 成人av手机在线| 亚洲国产三级在线| 影音先锋男人资源在线观看| 91性感美女视频| 亚洲欧美日韩网站| 亚洲国内欧美| 欧洲金发美女大战黑人| 成人vr资源| 久久久久高清| 中文在线免费一区三区| 国产精品一区=区| 青青草视频在线免费直播| 色综久久综合桃花网| 日漫免费在线观看网站| 亚洲精品一区二区三区四区高清 | 男女男精品视频网| 99爱视频在线| 亚洲黄色在线| 国产精品videossex国产高清 | 风间由美一区二区av101| 成人国产精品av| 性国裸体高清亚洲| 韩剧1988免费观看全集| 蜜乳av一区| 欧美另类暴力丝袜| av网站网址在线观看| 丝袜亚洲另类欧美重口| 黄色av网站在线看| 国产婷婷色综合av蜜臀av| 污污网站在线免费观看| 在线综合视频播放| 一级黄色片网站| 欧美色图天堂网| 亚洲一卡二卡在线| 欧美日韩精品一区二区三区蜜桃| 中文字幕精品视频在线观看| 天天色天天操综合| 精品美女久久久久| 欧美日韩一区二区在线| 日本五十熟hd丰满| 亚洲一区二区在线播放相泽| 欧美极品视频在线观看| 一区二区三区中文字幕精品精品| 亚洲波多野结衣| 亚洲精品免费看| 国产精品久久久免费看| 国产精品拍天天在线| 欧美人与禽zoz0善交| 国产精品毛片大码女人| 免费看污片网站| 中文字幕av免费专区久久| 成人做爰视频网站| 国产精品国产三级国产aⅴ入口| 免费成人深夜蜜桃视频| 亚洲欧美偷拍另类a∨色屁股| 黑人操日本美女| 一区二区三区精品| 免费在线不卡视频| 欧美色精品天天在线观看视频| 亚洲视屏在线观看| 在线不卡欧美精品一区二区三区| 中文在线观看免费高清| 欧美性极品少妇| a级片在线播放| 日韩欧美一区二区免费| 国内精品国产成人国产三级| 亚洲第一区在线观看| 黄色片在线播放| 久久精品国产91精品亚洲| av免费看在线| 欧美夜福利tv在线| 亚洲成a人片| 国产精品999| 人人爱人人干婷婷丁香亚洲| 精品国产一区二区三区日日嗨| 综合国产视频| 9999在线观看| 一区二区三区国产在线| 亚洲欧洲日本精品| 北条麻妃一区二区三区| 精品人妻无码一区| 亚洲精品中文在线观看| 国产精彩视频在线| 在线观看一区日韩| 亚洲AV无码精品国产| 亚洲欧洲国产一区| 深夜福利在线观看直播| 日韩亚洲一区二区| 女厕盗摄一区二区三区| 成人黄色大片在线免费观看| 精品自拍偷拍| 欧美日韩天天操| 欧美久久九九| 国产精品久久a| 高清国产一区二区| 极品久久久久久久| 亚洲成人av一区二区| 精品国产乱子伦| 亚洲大胆人体视频| fc2ppv国产精品久久| 国内自拍欧美激情| 国产一区一区| 午夜精品一区二区在线观看| 亚洲色诱最新| 国产精品19p| 国产精品久久久久久亚洲伦| yjizz国产| 亚洲精品一区在线观看| 国产原创在线观看| 国产精品欧美一区二区三区奶水| 伦理一区二区| 亚洲啊啊啊啊啊| 久久成人免费电影| 精品成人无码一区二区三区| 黄色成人av网| 欧美视频在线观看一区二区三区| www.色综合| 在线免费亚洲电影| 亚洲精品在线观看视频| 日本美女xxx| 1024精品合集| 亚洲一区二区激情| 亚洲第一男人av| 黑人玩欧美人三根一起进| 91亚洲精品一区| 91综合久久| 国产福利一区视频| www精品美女久久久tv| 国产欧美日韩另类| 亚洲韩国日本中文字幕| 18在线观看的| 91视频国产高清| 一级毛片免费高清中文字幕久久网| 97成人在线免费视频| 成人精品鲁一区一区二区| 国产无遮挡免费视频| 亚洲成人网在线| 牛牛精品一区二区| 久久人人97超碰人人澡爱香蕉| 国产一区二区三区的电影 | 国产精品高清乱码在线观看| 九九热久久66| 久久福利影视| 无码人妻丰满熟妇啪啪欧美| 在线亚洲高清视频| 91美女视频在线| 欧美一级免费视频| 思热99re视热频这里只精品| 北条麻妃在线视频观看| 久久久久久电影| 国产在线观看第一页| 日日噜噜噜夜夜爽亚洲精品| 亚洲精品一区av| 茄子视频成人在线观看 | 国产精品久久一区主播| 日韩欧美视频| 午夜视频在线网站| 亚洲一区在线播放| 香蕉视频成人在线| 国产精品久久久久久久av大片| 色婷婷亚洲mv天堂mv在影片| 手机看片福利盒子久久| 成人欧美一区二区三区小说| 国产视频www| 97在线观看免费| 欧美午夜精品一区二区三区电影| 中文字幕av不卡在线| 亚洲激情自拍视频| 日韩电影网址| 成人性教育视频在线观看| 国产精品99在线观看| 无码人妻aⅴ一区二区三区玉蒲团| 精品久久久久久久久久国产| 99riav在线| 粉嫩高清一区二区三区精品视频| 性欧美精品高清| 成人免费黄色小视频| 日韩精品黄色网| 一区二区三区| 国产二级片在线观看| 国产精品国产a级| 亚洲不卡免费视频| 日本韩国欧美精品大片卡二| 久久亚洲国产| 国产精品久久不卡| 大荫蒂欧美视频另类xxxx| 欧美高清视频| 精品欧美一区二区精品久久| 美女任你摸久久| 日本三级小视频| 久久成人精品一区二区三区| 欧洲精品一区|