Android 依賴注入java
Dagger2 android
1. 安裝依賴:git
```github
compile 'com.google.dagger:dagger:2.0.1'app
compile 'com.google.dagger:dagger-compiler:2.0.1'ide
```gradle
2. 新建一個Component,這是一個接口:ui
@Component(modules = ApplicationModule.class)spa
public interface ApplicationComponent {
}
```
3. 新建一個Module
```
public class ApplicationModule {
}
```
ok, 這裏出錯了,Error:(4, 24) 錯誤: 程序包javax.annotation不存在。
須要添加新的依賴,直接上最新的:
```
compile 'org.glassfish:javax.annotation:10.0-b28'
```
能夠查詢一下
又不行了,DaggerApplicationComponent這個自動生成的類,怎麼也導入不了。
解決方法:
在Project的build.gradle中加上:
```
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.2.3'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.7' //新增
}
}
```
在app的build.gradle中添加:
```
apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'
```
修改dagger-compile的導入方式:
```
apt 'com.google.dagger:dagger-compiler:2.0.1'
```
Sync.這樣就能夠找到那個自動生成的DaggerApplicationComponent,在Application的onCreate中生成Component:
```
component = DaggerApplicationComponent.builder()
.applicationModule(new ApplicationModule())
.build();
```
4. 添加註入
```
@Component(modules = ApplicationModule.class)
public interface ApplicationComponent {
void inject(MercenaryApplication androidApplication);
void inject(BaseActivity activity);
void inject(BaseFragment fragment);
}
```
這幾個都得在Application中提供注入。對應的Activity中也要注入。
5,ApplicationModule中提供Provider
```
@Provides
MercenaryApplication provideApplication() {
return mApplication;
}
@Provides
LayoutInflater provideLayoutInflater(){
return LayoutInflater.from(mApplication);
}
```
這個基本結構已經出來了。
代碼上傳到 ,能夠查看 tag step-1.