Dragger2
github dragger2配置
Android Gradle
// Add plugin https://bitbucket.org/hvisser/android-apt
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
}
// Apply plugin
apply plugin: 'com.neenbedankt.android-apt'
// Add Dagger dependencies
dependencies {
compile 'com.google.dagger:dagger:2.x'
apt 'com.google.dagger:dagger-compiler:2.x'
}
原理
- module->provider->dependency(params)->object
- @Inject 注入点
带有此注解的属性或构造方法将参与到依赖注入中,Dagger2会实例化有此注解的类
- @Module 依赖
带有此注解的类,用来提供依赖,里面定义一些用@Provides注解的以provide开头的方法,这些方法就是所提供的依赖,Dagger2会在该类中寻找实例化某个类所需要的依赖。
- @Component 容器
用来将@Inject和@Module联系起来的桥梁,从@Module中获取依赖并将依赖注入给@Inject
使用流程
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState){
...
User user = new User();
}
}
//MainActivity 依赖于 User
//1,构建依赖
//return new User();
@Module
public class ActivityModule {
@Provides User provideUser() {
return new User();
}
}
//2,构建容器(注射器,关联)Component
//User --> MainActivity
@Component(modules = ActivityModule.class)
public interface ActivityComponent {
void inject(MainActivity activity);
}
//3,完成依赖注入 @Inject
public class MainActivity extends ActionBarActivity
private ActivityComponent mActivityComponent;
@Inject
User user;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
mActivityComponent = DaggerActivityComponent
.builder()
.activityModule(new ActivityModule())
.build();
mActivityComponent.inject(this);
}
}