복붙노트

[SPRING] Spring은 오류를 throw합니다. Bean 정의가 추상입니다.

SPRING

Spring은 오류를 throw합니다. Bean 정의가 추상입니다.

다음 주제에 대해 도움이 필요합니다.

콩의 계층 구조가 있습니다.

<bean id="father" class="myPackage.Father" abstract="true"/>  

<bean id="childA" class="myPackage.ChildA" parent="father">    
        <property name="atrib1" value="hello"></property>  
</bean>  

<bean id="childB" class="myPackage.ChildB" parent="father">  
        <property name="atrib2" value="bye"></property>  
        <property name="atrib3" value="other"></property>  
</bean>  

추상 클래스에 대한 참조가 들어있는 다른 bean을 만들어야합니다. 그런 다음 런타임에 TYPE "myPackage.Father"의 변수를 초기화하고 자식 클래스 (다형성 메커니즘) 중 하나와 인스턴스화 할 수 있어야합니다. 나는 그런 뜻입니다 :

<bean id="reference" class="myPackage.Another"> 
        <property name="atrib4" ref="father"></property>
</bean>  

참조 (myPackage.Another의 인스턴스)는 myPackage.Father의 하위 클래스가 아닙니다. 그러나이 줄로 봄은 다음 오류를 던집니다.

Bean definition is abstract

내가 어떻게 처리 할 수 ​​있니?

어떤 도움을 주셔서 감사합니다, 미리 감사드립니다!

해결법

  1. ==============================

    1.무엇보다도 추상 콩은 추상 클래스와 아무런 관련이 없습니다. 클래스에 매핑 할 필요조차 없습니다. 다른 bean에서 공유하는 공통 속성을 그룹화하는 데 사용됩니다. 그러나 다른 bean의 속성을 연결하는 ref로 추상 bean을 사용할 수 없습니다. 당신의 bean myPackage.Another가 myPackage.Father 타입의 참조를 가지고 있고 당신의 자식 bean이 myPackage에 할당 할 수있다 (어느 쪽이든간에). 그러면 당신은 childA 나 childB 중 하나를 연결할 수있다. 당신의 myPackage에서.이 같은 또 다른 콩

    무엇보다도 추상 콩은 추상 클래스와 아무런 관련이 없습니다. 클래스에 매핑 할 필요조차 없습니다. 다른 bean에서 공유하는 공통 속성을 그룹화하는 데 사용됩니다. 그러나 다른 bean의 속성을 연결하는 ref로 추상 bean을 사용할 수 없습니다. 당신의 bean myPackage.Another가 myPackage.Father 타입의 참조를 가지고 있고 당신의 자식 bean이 myPackage에 할당 할 수있다 (어느 쪽이든간에). 그러면 당신은 childA 나 childB 중 하나를 연결할 수있다. 당신의 myPackage에서.이 같은 또 다른 콩

     <bean id="reference" class="myPackage.Another"> 
                <property name="atrib4" ref="childA"></property>
        </bean>
    
  2. ==============================

    2.추상 빈은 결코 객체로 인스턴스화되지 않으며 정의의 형태로만 존재합니다.

    추상 빈은 결코 객체로 인스턴스화되지 않으며 정의의 형태로만 존재합니다.

    문서에서 : http : //docs.spring.io/spring/docs/3.0.x/reference/beans.html 부모 bean은 불완전하기 때문에 자체적으로 인스턴스화 될 수 없으며 명시 적으로 추상으로 표시됩니다. 정의가 이와 같이 추상적 인 경우 하위 정의에 대한 상위 정의로 사용되는 순수 템플릿 bean 정의로만 사용할 수 있습니다. 다른 Bean의 ref 특성으로 참조하거나 상위 Bean ID와 함 2 명시 적 getBean () 호출을 수행하여 이러한 추상 상위 Bean을 자체적으로 사용하려고 시도하면 오류가 리턴됩니다. 마찬가지로 컨테이너의 내부 preInstantiateSingletons () 메소드는 추상으로 정의 된 bean 정의를 무시합니다.

    귀하의 경우

    <bean id="reference" class="myPackage.Another"> 
            <property name="atrib4" ref="father"></property>
    </bean>
    

    문제를 일으키는 추상으로 정의 된 bean을 참조합니다.

  3. ==============================

    3.추상 클래스와 추상 beans 사이에는 차이점이 없습니다. bean을 사용하고 abstract 인 다른 bean을 참조하면, 추상 클래스를 인스턴스화하고 확실하게 작동 할 수 없다는 것을 의미합니다! 추상 클래스를 사용할 때는주의하십시오! 추상 클래스는 템플릿 클래스에 사용되며 확장 할 수 있습니다.

    추상 클래스와 추상 beans 사이에는 차이점이 없습니다. bean을 사용하고 abstract 인 다른 bean을 참조하면, 추상 클래스를 인스턴스화하고 확실하게 작동 할 수 없다는 것을 의미합니다! 추상 클래스를 사용할 때는주의하십시오! 추상 클래스는 템플릿 클래스에 사용되며 확장 할 수 있습니다.

  4. from https://stackoverflow.com/questions/19094782/spring-throws-the-error-bean-definition-is-abstract by cc-by-sa and MIT license