Scope:@PerActivity 这个注解是怎么起作用的呢?
@Scope
@Retention(RetentionPolicy.RUNTIME)
public @interface PerActivity {
}
@PerActivity
@Component(dependencies = ApplicationComponent.class, modules = ActivityModule.class)
public interface ActivityComponent {
void inject(MainActivity mainActivity);
}
public ActivityComponent getActivityComponent() {
if (activityComponent == null) {
activityComponent = DaggerActivityComponent.builder()
.activityModule(new ActivityModule(this))
.applicationComponent(DemoApplication.get(this).getComponent())
.build();
}
return activityComponent;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getActivityComponent().inject(this);
mTvUserInfo = (TextView) findViewById(R.id.tv_user_info);
mTvAccessToken = (TextView) findViewById(R.id.tv_access_token);
}
Hello
@PerActivity
는dagger2
인터페이스,Scope
의Component
메서드 및 구현할 생성자 주석Module
이 있는 클래스에 주석을 달 수 있는provide
의 사용자 정의@Inject
입니다. 이Scope
범위에 있는 로컬 싱글톤입니다.https://blog.piasy.com//2016/...을 참고하세요
PerActivity 또는 ActivityScope라고 불리는 주석 이름과는 아무런 관련이 없습니다. 해당 범위는 구성 요소 자체를 초기화하는 사람에 따라 결정됩니다. 예를 들어 예제의 구성 요소가 Activity에 의해 구축된 경우 해당 범위는 다음과 같습니다. 그 활동을 자연스럽게 따라하게 됩니다