Dagger2에서 자주 사용하는 주석 해석

3342 단어
의존 주입
제어 반전(IoC)과 의존 주입(DI) 간단한 의존 주입 이해 의존 주입(IOC) 및 학습 Unity
Gradle 구성(gradle 플러그인 2.3 이상)
dependencies {
  compile 'com.google.dagger:dagger:2.11'
  annotationProcessor 'com.google.dagger:dagger-compiler:2.11'
}

@Inject 주석 구조 함수: 태그 구조 함수를 통해 Dagger2에게 이 클래스의 실례를 만들 수 있음을 알려 줍니다. (Dagger2는 이 클래스의 실례가 필요할 때 이 구조 함수를 찾아 관련 실례를 new로 표시할 수 있습니다.) 의존 관계를 제공합니다.주석 종속 변수: 종속 변수를 표시하여 Dagger2에서 종속 관계를 제공하고 변수를 주입합니다.
주해 구조 함수
public class Test{
    @inject
    public Test(){
    }
}

주석 종속 변수
public class Test1{
     @inject
     Test test;  
}

의존 변수를 주석하고 구조 함수를 주석하지 않으면null 대상을 얻을 수 있습니다.구조 함수를 주석하면 주석 의존 변수가 없으면 실례를 만들지 않습니다.
@Provides @Provides는 여전히 의존 관계를 제공하기 위해 @Inject에 대한 보충이며 @inject가 제3자 프레임워크와 인터페이스 클래스에 대한 맹점을 보완합니다. @Provides 방법 자체도 자신의 의존 관계를 가지고 있을 수 있습니다. @Provides 방법 자체는 독립적으로 존재할 수 없습니다. 모드에 의존해야 합니다.
@Module 메모 클래스를 통해 Dagger 의존 관계 제공
@Module
public class TestModule {
    @Provides
    public Test provideTest() {
        return new Test();
    }
}

@Component는 주해 인터페이스 클래스를 통해 의존과 필요한 의존 간의 교량으로 컴파일할 때 관련 실례를 생성하고 관련 의존을 주입하여 사명을 완성합니다.
@Component(modules={Test.class,Test1.class})
public interface TestComponent{
    void inject(Class class);
}

의존 규칙은 @Injdec와 @Module에서 의존 대상을 제공합니다.Module에서 클래스를 만드는 방법이 있는지 찾기 2.존재하면 매개 변수를 초기화하고 실례 생성을 완성합니다.@Inject를 사용한 인스턴스가 없습니다.
의지하여 잃어버리다.
@Qualifier 한정 식별자
1. 사용자 정의@Qualifier
@Qualifier //    
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface Test{
    String value() default "";
}

2.Module에서 사용
@Module()
public class TestTModule {
    @Test("test1")
    @Provides
    public Test  provideTest1() {
        return new test1();
    }
    @Test("test2")
    @Provides
    public Test  provideTest2() {
        return new test2();
    }
}

3. 테스트 실례 주입
pubic class Test{  
    @Test("test1")
    @Inject
    Test  test1;
    @Test("test2")
    @Inject
    Test test2;
}

@Scope는 범위의 메모를 식별하고 클래스의 인스턴스를 재사용하는 방법을 제어합니다.@inject 주석만 사용하고 @Scope 주석은 사용하지 않으며 주입에 의존할 때마다 새로운 실례를 만들 수 있습니다.@Scope 메모를 사용하면 처음 생성한 인스턴스가 캐시되고 캐시에 주입된 인스턴스가 반복되며 새 인스턴스가 생성되지 않습니다.클래스 주입 실례가 있는 클래스가 @Scope에 주석을 달면 Component는 같은 Scope에 주석을 달아야 합니다.
실례에 의존하는 주입원이 @Provides 방법일 경우 @Provides 방법은 @Scope에 의해 주석되어야 합니다.인스턴스의 주입 원본이 @Inject 메모의 구조 함수인 경우 인스턴스 클래스는 @Scope 메모여야 합니다. @Scope는 실제로 주입기를 제어합니다.
@Singleton @Singleton은 @Scope의 특례입니다. @Scope의 일종의 실현 방식입니다. @Singleton에서 클래스를 설명하면 이 클래스의 생성은 단일 모드를 사용하고 여러 라인이 공동으로 사용됨을 나타냅니다
Lazy는 연결된 모든 대상 T에 대해 타성으로 실례화하고 싶을 때, 지연 실례화된 Lazy를 만들 수 있습니다.그것을 필요로 할 때 get () 방법을 호출하면 대상을 실례화합니다.
public class Test {
    @Inject
    public Test() {
    }
}
public class TestActivity extends AppCompatActivity {
    @Inject
    Lazy mTest;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Test test1= mTest.get();
        Log.d("test", test1.toString());

        Test test2= mTest.get();
        Log.d("test", test2.toString());
    }
}

Provider 사용법은 Lazy와 같습니다. Provider가 get () 방법을 호출할 때마다 귀속 논리를 실행하고 실례를 생성합니다.

좋은 웹페이지 즐겨찾기