[정수리] Dagger2의 사용 경험을 공유하겠습니다.
10254 단어 Dagger2
프로젝트의 gradle 스크립트에 플러그인 의존도를 삽입하려면 다음과 같이 하십시오.
buildscript { repositories { jcenter() }
dependencies { classpath 'com.android.tools.build:gradle:1.3.0' // Add plugin classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' }
}
module의gradle 플러그인에 플러그인을 도입하려면 apt 플러그인을 먼저 도입해야 한다(Dagger2의 원리는 컴파일할 때 코드를 주입하는 것이다)
apply plugin: 'com.neenbedankt.android-apt'
그리고 dependencies에 의존을 추가합니다. 현재 최신 버전은 2.0.2입니다.
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
compile 'com.google.dagger:dagger:2.0.2'
apt 'com.google.dagger:dagger-compiler:2.0.2'
compile 'org.glassfish:javax.annotation:10.0-b28'
}
마지막 의존은 자바엑스 주석의 의존입니다. 표준 버전의 JDK 1.7 이상은 이 라이브러리에 직접 있지만 Google은 처음부터 유한한 자바엑스 지원만 제공합니다. (Oracle의 API 저작권)
2. 기본 개념
Dagger2를 이해하는 것은 처음에는 어려웠다. 우선 의존 주입의 개념과 왜 의존 주입이 필요한지 이해해야 한다.만약 네가 아직 잘 이해하지 못하더라도 상관없다. 다음의 이 예는 네가 이해하는 데 도움이 될 것이다.
@Inject (주입): 이 주석을 사용하면 현재 설명된 클래스나 속성이 주입되어야 하며, 설정에 따라 실례를 제공합니다. @Module (모듈): Dagger가 의존을 어디서 찾을 수 있는지, 여러 개의 Module를 합쳐서 Component에 의존할 수 있는지 설명합니다. @Provide (제공): 이 주석은 @Module에서 사용되며, 설명의 방법을 정의하면 Dagger에서 Module 설명의 실례를 어떻게 구성하고 제공하는지 알려 줍니다. @Component (구성 요소): 프로젝트와 모듈을 연결하는 용기입니다. 작성된 모듈을 구성 요소에 넣고 프로젝트의 클래스나 속성을 설명합니다. @Scope (역할 영역): Dagger 인스턴스의 라이프 사이클을 설명하는 역할을 하며, 다음 예에서는 사용할 것입니다. @Qualifier:
3. 사용 실례
Step 1: 어셈블리 설명
/** * Created by Hubert on 15/12/9. */
@Singleton
@Component(modules = AppModule.class)
public interface AppComponent {
void inject(BaseActivity baseActivity);
Context context();
Preference preference();
}
@Singleton 주석을 사용해서 하나의 예로 설명했습니다.Preference는 사용자의 취향을 저장하기 위한 클래스입니다.
/** * Created by Hubert on 15/12/9. */
public class Preference {
private String name;
private boolean enableSSL;
public boolean isEnableSSL() {
return enableSSL;
}
public void setEnableSSL(boolean enableSSL) {
this.enableSSL = enableSSL;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Step 2: 모듈 설명
/** * Created by Hubert on 15/12/9. */
@Module
public class AppModule {
private final DemoApplication application;
private final Preference preference;
public AppModule(DemoApplication application, Preference preference) {
this.application = application;
this.preference = preference;
}
@Provides
@Singleton
Context provideApplicationContext() {
return application;
}
@Provides
@Singleton
Preference providePreference() {
return preference;
}
}
이 모듈은 Preference를 제공할 것이고, Preference는 구조 함수에 전달될 것입니다.
Step 3: 프로그램의 뒷부분을 설명하기 위해 우리 팀이 채택한 프로젝트의 MVP 구조를 설명해 드릴 필요가 있습니다.우선 모든 Activity는 BaseActivity를 상속합니다.
/** * Created by Hubert on 15/12/9. */
public abstract class BaseActivity<T extends Presenter> extends AppCompatActivity {
private T mPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mPresenter = newPresenter();
}
/** * Provide your own presenter for this activity. * * @return Presenter of specific activity. */
protected abstract T newPresenter();
protected T getPresenter() {
return mPresenter;
}
}
newPresenter 방법이 onCreate에서 호출된다는 것만 이해하면 뒷내용을 충분히 이해할 수 있습니다.
Step 4: 위의 AppComponent는 전역 구성 요소를 제공하고, 다음에는 Activity 구성 요소를 제공합니다.
/** * Created by Hubert on 15/12/9. */
@PerActivity
@Component(dependencies = AppComponent.class, modules = {MainActivityModule.class})
public interface MainActivityComponent {
void inject(MainActivity mainActivity);
}
Dagger2는Component의 복용을 지원합니다.MainActivityComponent는 AppComponent에 의존합니다. 이것은MainActivityComponent에Preference를 제공합니다. 뒤에 언급될 것입니다.
/** * Created by Hubert on 15/12/9. */
@Module
public class MainActivityModule {
private final MainActivityViewer mViewer;
public MainActivityModule(MainActivityViewer viewer) {
this.mViewer = viewer;
}
@Provides
@PerActivity
MainActivityPresenter provideMainActivityPresenter(Preference preference) {
return new MainActivityPresenter(mViewer, preference);
}
}
MainActivity Module는 MainActivity Presenter를 제공합니다. 그가 제공한 방법에는 Preference 파라미터가 있습니다. 이 파라미터는 Dagger가 자동으로 주입합니다. 관심 있는 사람은 Dagger가 생성한 원본 코드를 볼 수 있습니다.
/** * Created by Hubert on 15/12/9. */
public class MainActivityPresenter extends Presenter<MainActivityViewer> {
private Preference mPreference;
public MainActivityPresenter(MainActivityViewer viewer, Preference preference) {
super(viewer);
mPreference = preference;
}
public void showPreference() {
getViewer().showToastMessage(mPreference.toString());
}
}
MainActivityPresenter는 Viewer 인터페이스의 showToastMessage를 호출하는 showPreference () 방법을 제공합니다.
Step 5: 이 안에 있는 모든 것들이 MainActivity에서 통합되어 있습니다.MainActivity에서 newPresenter 방법이 구현되었습니다.
@Inject
MainActivityPresenter presenter;
@Override
protected MainActivityPresenter newPresenter() {
DaggerMainActivityComponent.builder()
.appComponent(DemoApplication.getInstance().getAppComponent())
.mainActivityModule(new MainActivityModule(this))
.build().inject(this);
return presenter;
}
DaggerMainActivityComponent는 처음에는 존재하지 않았습니다.MainActivityComponent를 다 쓴 후에 컴파일을 클릭하면 생성됩니다.위에서 호출한presenter를 통해 주입되었습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Android의 Dagger2로 여러 계층의 Component 구조를 만들면...Fragment에서 ViewPager를 사용할 때 발생했습니다. 상술한 바와 같다 상위 Fragment(ViewPagerFragment)는 ViewPager를 레이아웃으로, 상위 Fragment가 등록하고자 하는 하...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.