Dagger2 @Module @Provide 的簡單使用
dagger2
的使用在前面幾篇文章已經介紹過了
這篇文章主要介紹dagger2
的@Module
和@Provides
的使用。
先來回顧這兩個註解的作用:@Module
的出現是為了解決@Inject
不是使用的場景,比如我們使用第三方庫,或者是別人的SDK
,在使用別人的東西我們是不太可能去修改的,所以@Inject
就使用不上了,dagger
為了解決這個問題推出了@module
,而@Providers
是標註Module
中能夠提供例項化物件的方法。
這麼描述太抽象了,直接來程式碼演示吧。
假設我們有個第三方的類ThirdBean
。
虛擬碼如下:
public class ThirdBean { public ThirdBean() {} public void showToast(String str){ Log.e("ThirdBean", "showToast: str==============>"+str ); } }
我們使用它是通過new ThirdBean()
來實現,但是我們都使用了dagger
了就不用再去new
一個物件了 。
我們可以這樣做:建立一個xxxxModule
的類,然後用@Module
去註解,再宣告一個返回需要例項化物件的方法,用@Provides
去註解,最後宣告一個介面xxxComponent
,用@Component
去註解。
虛擬碼如下:
@Module public class DaggerModule { @Provides ThridBean providerThirdBean(){ return new ThirdBean(); } } @Component(modules = {DaggerModule.class}) public interface MatchComponent { void mainActivityInject(MainActivity activity); }
在完成以上步驟之後rebuild project
,即可使用了。
按照慣例還是先使用@Inject
來註解該物件,然後利用dagger2
自動生成的程式碼來例項化該物件,最後就是呼叫該物件的方法測試能否呼叫成功。
虛擬碼如下:
@Inject public ThridBean thridBean; DaggerMatchComponent.create().mainActivityInject(MainActivity.this); thridBean.showToast("你好 module ");
本文完~,歡迎你留言和我一起學習談論。