복붙노트

[SPRING] 어노테이션으로 bean 정의 상속?

SPRING

어노테이션으로 bean 정의 상속?

어노테이션 기반 구성 (@Bean 등)을 사용하여 동일한 Bean 상속을 성취 할 수 있습니까?

<bean id="inheritedTestBean" abstract="true"
        class="org.springframework.beans.TestBean">
    <property name="name" value="parent"/>
    <property name="age" value="1"/>
</bean>

<bean id="inheritsWithDifferentClass"
        class="org.springframework.beans.DerivedTestBean"
        parent="inheritedTestBean" init-method="initialize">
    <property name="name" value="override"/>
    <!-- the age property value of 1 will be inherited from parent -->
</bean>

http://docs.spring.io/spring/docs/4.1.0.BUILD-SNAPSHOT/spring-framework-reference/htmlsingle/#beans-child-bean-definitions

해결법

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

    1.Java 언어에는 이미 필요한 모든 것이 있기 때문에 Java 구성에 추상 Bean의 개념이 없습니다. 문맥에서 추상 콩이 노출되지 않는다는 것을 잊지 마십시오. 그것은 일종의 템플릿입니다.

    Java 언어에는 이미 필요한 모든 것이 있기 때문에 Java 구성에 추상 Bean의 개념이 없습니다. 문맥에서 추상 콩이 노출되지 않는다는 것을 잊지 마십시오. 그것은 일종의 템플릿입니다.

    위 코드를 다음과 같이 다시 작성할 수 있습니다.

    @Configuration
    public class Config {
    
        @Bean
        public DerivedTestBean() {
            DerivedTestBean bean = new DerivedTestBean();
            initTestBean(bean);
            bean.setName("override");
            return bean;
        }
    
        private void initTestBean(TestBean testBean) {
            testBean.setName("parent");
            testBean.setAge(1);
        } 
    }
    

    initTestBean을 공유해야한다면, 필요하다면 다른 곳에서 Config를 공개하고 삽입 할 수 있습니다.

  2. from https://stackoverflow.com/questions/23266175/bean-definition-inheritance-with-annotations by cc-by-sa and MIT license