2013-05-14 3 views
8

스프링 관리 빈을 abstract 클래스에 주입하고 있는데, 작동하지 않는 것처럼 보인다. 이 충분하지 않은 경우 여기에 내가하는 일에 대한 설명은, 내가 게시물을 편집하고 몇 가지 코드를 추가 할 수 있습니다spring과 java ee를 사용하여 abstract 클래스에 beans를 삽입한다. 5

  1. 는 자바 코드 구현 - 1 개 추상 클래스, 그것에서 상속이 개 클래스와 콩을을 추상 클래스 및 서브 클래스에 주입되어 사용됩니다.
  2. 빈 설정에서 빈을 정의하십시오.
  3. 은 추상 클래스와 2 개의 하위 클래스를 spring config에 정의합니다.
  4. 첫 번째 빈을 추상 클래스 빈의 속성으로 정의하십시오.

결과 - 작동하지 않습니다.

그런 다음 삽입 된 빈을 추상 클래스에서 두 개의 하위 클래스로 이동하려고했습니다. 이제 작동합니다.

그래서 내가 잘못 했습니까? 아니면 스프링 3과 Java EE 5를 사용하여 추상 클래스에 콩을 삽입하는 것이 이론적으로 불가능합니까?

답변

11

스프링 3 및 Java EE 5를 사용하여 추상 클래스에 콩을 삽입하는 것은 이론상 불가능합니다.

종속성 삽입은 해당 클래스가 아닌 객체에서 발생합니다. Spring은 이미 Spring에 의해 인스턴스화 된 객체 인 Managed Bean에 의존성을 주입합니다. 추상 클래스는 인스턴스화 될 수 없기 때문에 여기서는 DI에 대해 생각하는 것이 개념적으로 잘못 될 수 있습니다.

약간의 관련 노트에서 태그에 abstract=true 속성을 추가하여 비 추상 클래스를 추상 스프링 bean으로 정의 할 수도 있습니다. 이는 bean이 인스턴스화되지 않고 다른 bean이 bean 상속을 통해 사용할 수있는 (Java 상속과 전혀 관련이없는) 속성의 단순한 템플리트로 사용됨을 나타냅니다.

이 컨텍스트에서 (구성한 경우) Dependency Injection은 추상으로 정의되었으므로 상위 bean이 아닌 하위 bean에서만 발생합니다. (참고 : 부모 bean이 추상적이어야하는 것은 필수는 아니지만 모든 것이 공통 bean 특성 세트로 작동 할 때 수행하는 것이 합리적입니다.)

+0

답장을 보내 주셔서 감사합니다. 그러나 DI가 Java EE 6의 추상 클래스에서 가능하다는 것을 알았습니까? – user1414745

+0

주입되는 속성은 추상 클래스에서 정의 될 수 있지만 주입은 하위 클래스 객체임을 의미하는 Object에서만 발생합니다. –