Dagger之拓展sington與scope

sington

簡單一句話概括就是:添加了sington注解,只要是同一個MainComponent對象,那么其提供就全都是所有對象都是同一個,即單例。否則全不一樣。如果不是同一個MainComponent,那還用說嗎,肯定不一樣啊。

MainComponent mainComponent = DaggerMainComponent.create();
        mainComponent.inject(this);

sington添加位置:

@Singleton
@Component(modules = MainModule.class)
public interface MainComponent {



    void inject(MainActivity activity);
    void inject(Main2Activity activity);
    void inject(MainActivity.InnerClass innerClass);
}
@Module
public class MainModule {

    @Singleton
    @Provides
   public ClassA providerA(){
       return new ClassA();
   }




}

相關(guān)代碼(沒貼全,只貼了主要)

public class MainActivity extends AppCompatActivity {

    @Inject
    ClassA sa;

    @Inject
    ClassA ia;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MainComponent mainComponent = DaggerMainComponent.create();
        mainComponent.inject(this);
        Log.e("yjm",sa.toString());
        Log.e("yjm",ia.toString());

        new InnerClass(mainComponent);
        startActivity(new Intent(this,Main2Activity.class));


    }


    class  InnerClass{

        @Inject
        ClassA aa;
        @Inject
        ClassA ab;

        private MainComponent mainComponent;

        public InnerClass(MainComponent mainComponent) {
            this.mainComponent = mainComponent;
            mainComponent.inject(this);
            Log.e("yjmInnerClass",aa.toString());
            Log.e("yjmInnerClass",ab.toString());



        }
    }
}

重要:掌握這個單例要干嘛,看了好像確實是實現(xiàn)了,卻不知道為了什么,這就很瓜皮了。
項目中其實有很多需要用到單例,比如app,retrofitmanager,還有緩存管理,或者sp管理,數(shù)據(jù)庫管理器。這些肯定都是要管理起來。我們可以將這些對象都注入到全局唯一的myapp中去,然后提供返回component的方法。在每個界面片段需要的地方獲取下,就可以保證這些對象都是單例。這樣也就成為了真正的全局單實例。


至于scope和sington的關(guān)系:@Singleton注釋就是@Scope的一個默認實現(xiàn)

@Scope
@Documented
@Retention(RUNTIME)
public @interface Singleton {}

但是@scope的使用不僅如此。功能強大。因為還不是太懂,所以日后補充

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容