Dagger 2 얕은 것부터 깊은 것까지 (1)
5260 단어 Dagger
데모 주소:
개술
Dagger 2 공식 문서에는 "A fast dependency injector for Android and Java."라는 문구가 있습니다.안드로이드와 자바에 적용되는 빠른 의존 주입
여기에는 주로 Dagger2를 알고 의존 주입에 대한 서술이 많지 않다.의존 주입을 이해하지 못하면 다음과 같은 블로그를 참고할 수 있다.
Gradle 플러그인은 2.3 이상이면 이렇게 설정할 수 있습니다
dependencies {
compile 'com.google.dagger:dagger:2.x'
annotationProcessor 'com.google.dagger:dagger-compiler:2.x'
}
Gradle 플러그인이 2.3 이하이면 apt 플러그인을 빌려야 합니다.
dependencies {
... // classpath
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' // apt
}
dependencies {
compile 'com.google.dagger:dagger:2.x'
apt 'com.google.dagger:dagger-compiler:2.x'
}
Dagger 2에서 javax를 사용합니다.inject.Inject 주석은 Dagger 구성 응용 프로그램 클래스의 인스턴스를 충족하고 의존성을 충족하기 위해 주입에 의존해야 하는 구조 함수와 필드를 식별합니다.
@Inject에는
여기에는 Dagger 2의 인스턴스를 만들기 위해 StudentBean 객체의 구조 함수가 @Inject에 주석되어 있음을 설명합니다.
public class StudentBean {
private int no;
private String name;
@Inject
public StudentBean() {
this.no = 1;
this.name = " ";
}
***
}
테스트:
public class StudentActivity extends BaseActivity {
***
@Inject
StudentBean studentBean;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ButterKnife.bind(this);
// Log("student:StudentBean{no=1, name=' '}")
Log.d("test", "student:" + studentBean.toString());
tvStu.setText(studentBean.toString());
}
***
}
여기에 StudentBean 실례를 간단하게 주입하면 완성된 셈이다.
콜아웃 필드
이때 의문이 하나 생겼다. 모든 구성원 변수가 기본 데이터 형식이 아니라 어떤 구성원 변수 자체가 하나의 유형의 실례이다. 그러면 우리는 의존 주입을 사용할 수 있을까?기왕 이런 의문이 있는 바에는 한번 해 보아도 무방하다.
public class AreaBean {
private String provice;
private String city;
@Inject
public AreaBean() {
this.provice = " ";
this.city = " ";
}
***
}
public class ScoreBean {
private double chinese;
private double math;
@Inject
public ScoreBean() {
this.chinese = 90.5;
this.math = 78.0;
}
***
}
public class StudentBean {
private int no;
private String name;
@Inject
AreaBean areaBean;
@Inject
ScoreBean scoreBean;
@Inject
public StudentBean() {
this.no = 1;
this.name = " ";
}
***
}
***
@Inject
StudentBean studentBean;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ButterKnife.bind(this);
// Log:student:StudentBean{no=1, name=' ', areaBean=AreaBean{provice=' ', city=' '},scoreBean=ScoreBean{chinese=90.5, math=78.0}}
Log.d("test", "student:" + studentBean.toString());
tvStu.setText(studentBean.toString());
}
***
} 참고:
@Inject는 만능이 아닙니다.
@Inject는 만능이 아닙니다. 알 수 없는 것에 대해서는 무력합니다.예를 들어, 익숙한 인터페이스, 인터페이스는 실례를 만들 수 없습니다. 이 때 @Inject 주석을 사용할 수 없습니다.
끝말
지금까지 Dagger 2 입문의 간단한 예는 이미 실현되었다.간단하게 요약하면 다음과 같습니다.
참조 문서
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Dagger 2 얕은 것부터 깊은 것까지 (1)Dagger 2 공식 문서에는 "A fast dependency injector for Android and Java."라는 문구가 있습니다.안드로이드와 자바에 적용되는 빠른 의존 주입 Dagger 2에서 javax...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.