日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

dagger2 注入_使用Dagger 2在GWT中进行依赖注入

發布時間:2023/12/3 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dagger2 注入_使用Dagger 2在GWT中进行依赖注入 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

dagger2 注入

依賴注入是一種軟件開發概念,其中為對象提供了創建所需的所有對象或值。 GWT用戶已經熟悉GIN,但已經不推薦使用此工具,因此不再支持它,因此使用GIN的應用程序當前確實需要告別。 Dagger是GWT的新依賴注入框架。 對于那些不熟悉該框架的人,Dagger的目的是為Android提供DI,但現在已用于通用DI。 它也適用于GWT。 在本文中,我們將簡要介紹Dagger,以及如何使用Dagger為GWT項目設置DI。

GWT有什么用?

與使用生成器(將來會在GWT中刪除)的GIN不同,Dagger使用編譯時注釋處理器。 使用Dagger的項目在升級GWT版本時會遇到較少的麻煩。 另一方面,DI通常會引入復雜性,因此很難調試注入過程中發生的錯誤。 GIN堆棧跟蹤有時是不可讀的。 Dagger的目標之一就是減少這一缺點。 Dagger生成的代碼接近于人類編寫的代碼,因此更容易了解幕后發生的事情,因此開發人員在調試時不會有太多麻煩。

在GWT項目中使用Dagger:

  • 依存關系 <dependency><groupId>javax.inject</groupId><artifactId>javax.inject</artifactId><version>1</version><scope>provided</scope></dependency><dependency><groupId>com.google.dagger</groupId><artifactId>dagger-gwt</artifactId><version>2.5</version><scope>provided</scope></dependency><dependency><groupId>com.google.dagger</groupId><artifactId>dagger-compiler</artifactId><version>2.5</version><scope>provided</scope></dependency>

    Dagger要求在編譯時將javax.inject注釋放在類路徑上。 此外,需要將Dagger模塊添加到.gwt.xml中:

    <inherits name="dagger.Dagger"> </inherits>
  • 注釋處理器
  • 如果使用的是maven,則要在調用編譯目標時自動執行注釋編譯器,則需要使用高于3.5.1的版本。 否則,您將需要在插件配置中同時指定注解處理器和注解處理器路徑。 可選地,可以將dagger-compiler編譯器從依賴項中刪除,并添加到注釋處理器路徑中,如Thomas Broyer在SO中所指定的:

    <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.5.1</version><configuration><source>1.7</source><target>1.7</target><annotationProcessorPaths><path><groupId>com.google.dagger</groupId><artifactId>dagger-compiler</artifactId><version>${dagger.gwt.version}</version></path></annotationProcessorPaths></configuration> </plugin>

    值得注意的是,在開發模式下,每次注入的類發生更改時,都必須重新運行注釋處理器。 在maven下,可以使用流程類目標運行注釋處理器。 我尚未測試Gradle,但是使用Gradle的概念也應該相同。

  • 簡單的依賴注入
  • 假設我們有一個壓縮圖像的服務。 該服務取決于其他兩個服務:下載圖像的服務和壓縮后上傳圖像的服務。 所有對象都有零個args構造函數。

    public class ImageCompressor {@Inject public ImageDownloader downloader;@Inject public ImageUploader uploader;@Injectpublic ImageCompressor(){ }public void compress(String url) {downloader.download(url);GWT.log("compressing image");uploader.upload(url);}}public class ImageDownloader {@Injectpublic ImageDownloader() {}public void download(String url) {GWT.log("downloading image at " + url);}}public class ImageUploader {@Injectpublic ImageUploader() {}public void upload(String url) {GWT.log("uploading compresesed image at " + url);}}
  • 定義模塊
  • 如果您需要特殊的設置來構造對象,例如設置一些值或指定構造函數參數,則需要創建一個模塊。 假設我們需要為ImageDownloader對象提供一個超時值:

    public class ImageDownloader {int timeout;//@Inject we cannot use inject on the constructor anymorepublic ImageDownloader(int timeout) {this.timeout = timeout;}public void download(String url) {GWT.log("downloading image at " + url);} }

    然后,我們需要指定一個提供ImageDownloader的模塊:

    @Module public class ImageCompressionModule {@Providespublic ImageDownloader getImageDowloader(){return new ImageDownloader(15);}
  • 定義應用程序組件
  • 現在,我們定義了模塊和對象,我們將創建DI組件,該組件將用于獲取注入的對象實例。

    @Component(modules=ImageCompressionModule.class) public interface AppComponent {ImageCompressor getImageCompressor(); }
  • 使用注入的對象
  • 我們的應用程序組件的實例可以通過以下方式獲取:

    AppComponent component = DaggerAppComponent.builder().imageCompressionModule(new ImageCompressionModule()).build();

    如果使用的是IDE,則會注意到它抱怨DaggerAppComponent。 這很正常,因為DaggerAppComponent僅在運行注釋處理器之后才可用。

    最后,我們可以使用我們的對象:

    ImageCompressor compressor = component.getImageCompressor();compressor.compress("http://www.g-widgets.com/GWTcon.jpg");

    結果:

    downloading image at http://www.g-widgets.com/GWTcon.jpg compressing image uploading compressed image to http://www.g-widgets.com/GWTcon.jpg

    結語:

    Dagger 2是GWT的下一代依賴注入。 我們已經在這篇文章中看到了框架的基本功能。 可以在Dagger的主要用戶指南中找到更多高級DI功能: https : //google.github.io/dagger/users-guide 。 Dagger的GWT版本與后端版本的工作方式相同:代碼可以在客戶端和服務器端都可以工作,因此,如果在JVM中進行調試有好處,可以將DI移植到后端可能很有用。

    完整代碼可在以下網址獲得: https : //github.com/zak905/dagger2-gwt-example

    翻譯自: https://www.javacodegeeks.com/2017/07/dependency-injection-gwt-using-dagger-2.html

    dagger2 注入

    總結

    以上是生活随笔為你收集整理的dagger2 注入_使用Dagger 2在GWT中进行依赖注入的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。