문제

개찰구에 양식이있는 페이지가있어 양식에 공동 작업자가 작업을 완료해야합니다. 공동 작업자가 주입되어 (Guice를 사용하고 있음) : 다음과 같은 것 같습니다.

public class RegistrationPage extends WebPage {
    @Inject
    public RegistrationPage(RegistrationService service) {
        this.service = service;
        add(new RegistrationForm());            
    }

    private class RegistrationForm extends Form {
        public RegistrationForm() {
            // setup
        }

        protected void onSubmit() {
           service.doSomething();
        }
    }
}

등록 서비스가 필요한 등록 형식 일 때 등록 영역에 주입된다는 생각이 마음에 들지 않습니다. 등록 서비스를 변경하여 등록 서비스를받을 수 있습니다.

public RegistrationForm(RegistrationService service) {
    this.service = service;
}

등록 페이지에서 필드를 제거하지만 등록 페이지는 여전히 패스 스루를 수행하는 데 사용되고 있습니다.

내가 묻는 것은이 작업을 수행하기위한 모범 사례가 무엇인가? 이것이 괜찮습니까?

   public class RegistrationPage extends WebPage {
        @Inject
        public RegistrationPage(RegistrationForm form) {
            add(form);
        }
   }

   ---

   private class RegistrationForm extends Form {
        private RegistrationService service;

        @Inject
        public RegistrationForm(RegistrationService service) {
            this.service = service;
        }

        protected void onSubmit() {
           service.doSomething();
        }
    }

나는 별도의 클래스/파일로 등록 형식을 갖고 싶어서 이것을 선호합니다. 나는 개찰구를 처음 접했기 때문에 표준이 무엇인지 확신 할 수 없다 - 누군가 나에게 안내 빛을 보여줄 수 있습니까? :)

도움이 되었습니까?

해결책

개찰구+IOC의 기본 패러다임은 다음과 같습니다. 대부분의 종속성은 세터 주입을 통해 주입해야합니다. 웹 페이지에는 생성자 주입이 불가능합니다.

구성 요소/패널/양식/페이지는 반복 끝에만 있어야합니다.

따라서 의존성을 주입하십시오 RegistrationService 행복하게 RegistrationForm , 그런 다음 add (new registrationform ())을 사용하여 등록 페이지에서 작성하십시오.

개찰구에는 icomponentInstantiationListener가 있습니다. 그 중 하나는 기체입니다. 각 구성 요소/웹 페이지의 생성자 중에 알림을받습니다. 따라서 Code의 일부 부분이 실행되기 전에 REGISTRATIONFORM이 종속성을 주입합니다.

내가 할 수있는 방법 : (물론 등록 형식은 다른 파일에있을 수 있습니다)

public class RegistrationPage extends WebPage {

@Inject
public RegistrationPage() {
    add(new RegistrationForm());            
}

---
private static class RegistrationForm extends Form {
   RegistrationService service;

      @Inject
     public void setRegistrationService (RegistrationService  service){
     this.service = service;
        }
    public RegistrationForm() {
        // setup
    }

    protected void onSubmit() {
       service.doSomething();
    }
}
}

페이지 내부에 등록 정보를 내부 클래스로 넣기로 결정한 경우 정적을 선언하십시오! 당신은 대부분 동봉 클래스에 대한 언급이 필요하지 않을 것입니다.

다른 팁

제 생각에는 개찰구에 대한 DI는 하나의 혼란스러운 요소를 가지고 있으며 구성 요소 나 페이지에서는 자동으로 수행되지만 모델에는 없습니다. 내 의견으로는 정확히 모델 (페이지가 아님)은 JPA 등에 의존적이어야합니다.

공식 문서는 사용하라고 말합니다 InjectorHolder.getInjector().inject(this)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top