Dagger2의 간단한 사용
30824 단어 안드로이드 학습 노트#안드로이드 기본 사항
Dagger2의 간단한 사용
문서 목록
1. 예비 지식
1.1 메모 개념
1.2 제어 반전과 의존 주입 개념
2. Dagger2의 사용
2.1 기본 사용 방법
api 'com.google.dagger:dagger:2.24'
annotationProcessor 'com.google.dagger:dagger-compiler:2.24'
//Tips.class
import javax.inject.Inject;
public class Tips {
@Inject
public Tips() {
}
public String getTip() {
return " !";
}
}
/**
* MainActivityComponent.class
* ,( )
* : ( )+Component
*/
import dagger.Component;
@Component
public interface MainActivityComponent {
void inject(MainActivity mainActivity);
}
/**
* MainActivity.class
* 1 :@Inject 。
* 2 : 。
*/
@Inject//1
Tips tips;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DaggerMainActivityComponent.create().inject(this);//2
tips.getTip();
}
2.2 @Module 및 @Provides
//GsonModule.class
import com.google.gson.Gson;
import dagger.Module;
import dagger.Provides;
@Module
public class GsonModule {
@Provides
public Gson provideGson(){
return new Gson();
}
}
//GsonModule.class
import com.virtual.learnrxjava.GsonModule;
import com.virtual.learnrxjava.MainActivity;
import dagger.Component;
@Component(modules = GsonModule.class)
public interface MainActivityComponent {
void inject(MainActivity mainActivity);
}
// SubClass.class SuperClass.class
@Module
public class SubModule {
@Provides
public SuperClass getSubClass(){
return new SubClass();
}
}
2.3 @Named 및 @Qualifier
@Module
public class GsonModule {
@Provides
@Named("g1")
public Gson provideGsonA(){
return new Gson();
}
@Provides
@Named("g2")
public Gson provideGsonB(){
return new Gson();
}
}
//
@Injetc
public showJson(@Named("g1") Gson gson){
...
}
//
//myGson1.class
@Qualifier
@Retention(RUNTIME)
public @interface myGson1{
}
//myGson2.class
@Qualifier
@Retention(RUNTIME)
public @interface myGson2{
}
@Module
public class GsonModule {
@Provides
@myGson1
public Gson provideGsonA(){
return new Gson();
}
@Provides
@myGson2
public Gson provideGsonB(){
return new Gson();
}
}
@Injetc
public showJson(@myGson1 Gson gson){
...
}
2.4 @Singleton 및 @Scope
@Module
public class GsonModule {
@Singleton
@Provides
public Gson provideGson(){
return new Gson();
}
}
@Singleton
@Component(modules = GsonModule.class)
public interface MainActivityComponent {
void inject(MainActivity mainActivity);
}
//
@Scope
@Retention(RUNTIME)
public @interface ApplicationScope{
}
@Module
public class GsonModule {
@ApplicationScope
@Provides
public Gson provideGson(){
return new Gson();
}
}
@ApplicationScope
@Component(modules = GsonModule.class)
public interface MainActivityComponent {
void inject(MainActivity mainActivity);
}
// App Application
import android.app.Application;
import android.content.Context;
public class App extends Application {
ActivityComponent activityComponent;
@Override
public void onCreate() {
super.onCreate();
activityComponent=DaggerActivityComponent.builder().build();
}
public static App get(Context context){
return (App)context.getApplicationContext();
}
ActivityComponent getActivityComponent(){
return activityComponent;
}
}
@ApplicationScope
@Component(modules = GsonModule.class)
public interface ActivityComponent {
void inject(MainActivity activity);
void inject(SecondActivity activity);
}
2.5 @Component의 dependencies
// New.class
import javax.inject.Inject;
public class New {
@Inject
public New(){
}
public String msg(){
return "Hello!";
}
}
// NewModule.class
import dagger.Module;
import dagger.Provides;
@Module
public class NewModule {
@Provides
public New providerNew(){
return new New();
}
}
// NewComponent.class
import dagger.Component;
@Component(modules = NewModule.class)
public interface NewComponent {
New getNew();
}
@Component(modules = GsonModule.class,dependencies = NewComponent.class)
public interface ActivityComponent {
void inject(MainActivity activity);
void inject(SecondActivity activity);
}
// App.class
@Override
public void onCreate() {
super.onCreate();
activityComponent=DaggerActivityComponent.builder().
newComponent(DaggerNewComponent.create()).build();
}
2.6 게으름 피우기
//
@Inject
Lazy<Tips> tipsLazy;
...
Tips tipsExample = tipsLazy.get()
3. 참고 자료
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
java 반사 메커니즘 문맹 퇴치반사 메커니즘은 운행 상태에서 임의의 클래스에 대해 이 클래스의 모든 속성과 방법을 알 수 있다.임의의 대상에 대해 임의의 방법과 속성을 호출할 수 있다.이런 동적으로 얻은 정보와 동적 호출 대상의 방법의 기능을 자...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.