Dagger2에서 자주 사용하는 주석 해석
제어 반전(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 () 방법을 호출할 때마다 귀속 논리를 실행하고 실례를 생성합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.