bean 엘리먼트의 parent attribute 사용

예전 스프링 스터디를 하면서 bean 에리먼트의 parent 어트리뷰트를 정의하는 것을 배운적이 있다.


사실 그때까지만해도 이 기능을 사용할 일이 있을까라는 생각을 했는데 오늘 난 이 기능을 사용하게 되었고 유용함을 느꼈다.


내가 사용하게 된 계기는 interceptor의 property 에 validator bean을 추가하는 과정에서 중복이 발생한다는 것이였다.

예를 들어 /a 라는 URL 패턴으로 접근하는 요청에 대해서 A라는 인터셉터가 동작하고 A라는 인터셉터에서는 valid_1, valid_2, valid_3 가 동작해야 한다.

/b 라는 URL 패턴에서는 B라는 인터셉터가 동작하고 valid_1, valid_2, valid_4 가 동작해야 한다.

여기서 확인할 수 있는 것은 valid_1, valid_2는 중복으로 인터셉터에 등록된다는 것이다.


이 중복을 어떻게 해소할 수 있을까라는 고민을 하게 되었고, 예전 스프링 스터디를 진행하면서 알게된 bean 엘리먼트의 parent 어트리뷰트가 생각났던 것이다.


예제를 다음과 같이 만들어봤다.


test-bean.xml

<bean id="common" abstract="true">

<property name="name" value="kyu" />

        <property name="age" value="100" />

        <property name="myFriends">

                <list>

                        <value>kyu1</value>

                        <value>kyu2</value>

                       <value>kyu3</value>

               </list>

        </property>

</bean>

 

<bean id="profileMe" class="com.test.common.util.ProfileMeTest" parent="common">

        <property name="job" value="developer" />

</bean>


Java

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(locations = {"/test-bean.xml"})

public class InterceptorParentTest {

 

        @Resource(name = "profileMe")

        private ProfileMeTest profileMeTest;

 

        @Test

        public void getParentTest() {

               System.out.println(profileMeTest);

        }

}


결과 값

ProfileMeTest(name=kyu, age=100, job=developer, myFriends=[kyu1, kyu2, kyu3])