Dagger2 分析

1.概念

控制反转(IoC :Inversion of Control):主要用来削减计算机程序的耦合问题,包含依赖注入和依赖查找两种类型。
show code:

public class Wukong { private Jingubang jingubang; public Wukong(){ // 依赖 this.jingubang = Jingubang(); } }

2.使用

2.1悟空:

import javax.inject.Inject; public class Wukong { @Inject JinGuBang jinGuBang; @Inject public Wukong() { } public String useJinGuBang() { return this.jinGuBang.use(); } }

2.2金箍棒:

import javax.inject.Inject; public class JinGuBang { @Inject public JinGuBang() { } public String use() { return "user Jing gu bang"; } }

2.3@Module:

import dagger.Module; import dagger.Provides; @Module public class XiYouModule { @Provides // @Singleton Wukong provideWukong() { return new Wukong(); } @Provides // @Singleton JinGuBang provideJinGuBang() { return new JinGuBang(); } }

@Singleton:这个被依赖的对象在应用的生命周期里只有一个实例。

2.4@Component接口,连接@Module和@Inject

import android.app.Activity; import javax.inject.Singleton; import dagger.Component; @Component(modules = {XiYouModule.class}) @Singleton public interface XiYouComponent { void inject(Wukong wk); void inject(Activity a); }

2.5使用

public class MainActivity extends AppCompatActivity { private static final String TAG = "##MainActivity"; @Inject Wukong wukong; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView welcomeTextView = (TextView) findViewById(R.id.welcome_textview); XiYouComponent xiYouComponent = DaggerXiYouComponent .builder() .xiYouModule(new XiYouModule()) .build(); xiYouComponent.inject(this); welcomeTextView.setText(wukong.useJinGuBang()); } }

3优点:

封装比较好,不用xx.yy.zz长链引用了。

你可能感兴趣的:(Dagger2 分析)