1.解耦原因 • 组合关系:Activity中还有业务的引用 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mMainActivityPresenter = new MainActivityPresenter(this); … 2.常见的解耦方式 • 利用配置文件,使用反射获取到需要加载的对象。 • 设计模式:单例、工厂、观察者……
3.注解回顾 a.注解本身是一个类,用于标注其他类或者方法的特性。 b.注解类有点像属性,可以多个使用,标注对象的功能。 c.生活中的例子 @Game,@Code Student student1;
@Code,@Love(girlfriend = “xiaohong”) Student student2;
Student{ String name; Int age; }
3.dagger2的使用 apt插件的安装: 1.在project的gradle中添加 buildscript { dependencies { classpath ‘com.neenbedankt.gradle.plugins:android-apt:1.8’ } } 2.apt插件的使用 在modle的gradle中添加 apply plugin: ‘com.neenbedankt.android-apt’
3.添加dagger2的依赖 dependencies { compile ‘com.google.dagger:dagger:2.6’ apt ‘com.google.dagger:dagger-compiler:2.6’ }
四个注解使用 @Module、@Provides、@Component、@Inject
@Module:标注对象创建的容器 @Module public class MainActivityModule {
MainActivity mMainActivity; public MainActivityModule(MainActivity mainActivity) { mMainActivity = mainActivity; } @Provides:标识需要创建的对象 MainActivityPresenter providerMainActivityPresenter(){ return new MainActivityPresenter(mMainActivity); }}
@Component:将创建好的对象与需要注入的对象组合到一起 @Component(modules = MainActivityModule.class) public interface MainActivityComponent { void in(MainActivity mainActivity); }
@Inject MainActivityPresenter mMainActivityPresenter;
最后赋值即可: DaggerMainActivityComponent.builder().mainActivityModule(new MainActivityModule(this)).build().in(this);