美文网首页
Dagger之拓展sington与scope

Dagger之拓展sington与scope

作者: _Youngjim | 来源:发表于2018-04-27 16:08 被阅读0次

    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();
       }
    
    
    
    
    }
    

    相关代码(没贴全,只贴了主要)

    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());
    
    
    
            }
        }
    }
    

    重要:掌握这个单例要干嘛,看了好像确实是实现了,却不知道为了什么,这就很瓜皮了。
    项目中其实有很多需要用到单例,比如app,retrofitmanager,还有缓存管理,或者sp管理,数据库管理器。这些肯定都是要管理起来。我们可以将这些对象都注入到全局唯一的myapp中去,然后提供返回component的方法。在每个界面片段需要的地方获取下,就可以保证这些对象都是单例。这样也就成为了真正的全局单实例。


    至于scope和sington的关系:@Singleton注释就是@Scope的一个默认实现

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

    但是@scope的使用不仅如此。功能强大。因为还不是太懂,所以日后补充

    相关文章

      网友评论

          本文标题:Dagger之拓展sington与scope

          本文链接:https://www.haomeiwen.com/subject/wafblftx.html