다른 서비스 클래스에 종속성으로 사용자 정의 클래스를 주입하려고하지만 작동하지 않습니다. 항상 NPE로 끝납니다. 여기 내 예 (간단한 자바 SE) ... 모든 실행 얻을대거 2와 함께 여러 서비스 클래스에 하나의 종속성
내 주요 클래스입니다
public class Main {
public static void main(String[] args) throws IOException, TimeoutException {
MyApplication MyApp = new MyApplication();
MyApp.execute();
}
}
하여 MyApplication 클래스
public class MyApplication {
private MyApplicationComponent appComponent;
@Inject FooService fooService;
@Inject BarService barService;
@Inject BazService bazService;
public MyApplication() {
component = DaggerMyApplicationComponent.builder().build();
component.inject(this);
}
public void execute() {
fooService.doStuff();
barService.doStuff();
// this will happen in the FooService construct, see below
// bazService.doStuff();
}
}
사용하지 않고, 단검에 정의 된 구성 요소 및 모듈 클래스
@Inject 생성자 방식
@Singleton
@Component(modules = {MyApplicationModule.class})
public interface MyApplicationComponent {
void inject(MyApplication application);
}
@Module
public class MyApplicationModule {
@Singleton
@Provides
FooService provideFooService() {
return new FooService();
}
@Singleton
@Provides
BarService provideBarService() {
return new BarService();
}
@Provides
BazService provideBazService() {
return new BarService();
}
}
MyApplicationModule 및 MyApp 사용 필요한 의존성을 제공하는 licationComponent는 Main.class 내에서 작동합니다. 또한 FooService 클래스 내에서 BazService를 사용하려고합니다. 따라서 @Inject 방법을 사용하여 FooService.class와의 종속성으로 정의합니다. 항상 Main.class가 실행하기 FooService.class
public class FooService {
@Inject BazService bazService;
public FooService(){}
public doStuff(){
bazService.doStuff();
}
}
내 BazService의 @Inject를 사용
인해 FooSerivce 클래스에 정의되지 않은 bazService로하는 NPE에서 끝납니다. 나는 어노테이션을 어디에도 추가하지 않았다는 것을 생각하지 않는다. 단검은 이런 식으로 작동하지 않을 것 같아요 ... 어떤 생각?
감사합니다. 네가 옳아! 나는 나쁜 예를 택한다. 마지막 코드 블록을 변경했습니다. FooService 내의 doStuff()는 이제 BazService 내의 동일한 메소드를 호출합니다. 작동하지 않습니다. :/ – l00kus
여전히 NPE를 던지고 있습니까? 주사는 이제 괜찮아 질거야. – Dondump