Singleton & Prototype
<bean /> 엘리먼트의 scope 속성을 사용하여 bean의 scope을 지정해 줄 수 있습니다. default 값은 singleton입니다.
<bean id="keesun6" class="beanConfiguration.Member">
<property name="email" ref="email2" />
</bean>
<bean id="keesun7" class="beanConfiguration.Member">
<property name="email" ref="email2" />
</bean>
위와 같이 설정 해뒀다면 keesun6과 keesun7 이라는 Member bean은 같은 email 객체를 가지게 됩니다. 그래서 아래 처럼 원하지 않는 일이 발생할 수 있습니다.
Member keesun6 = getMember("keesun6");
Member keesun7 = getMember("keesun7");
Email email6 = keesun6.getEmail();
Email email7 = keesun7.getEmail();
assertEquals(email6, email7);
String emailAddress = "hi@email.com";
email6.setAddress(emailAddress);
assertEquals(emailAddress, email7.getAddress());
}
email2 bean의 scope을 prototype으로 지정해 줍니다.
<bean id="email3" class="beanConfiguration.Email" scope="prototype"/>
<bean id="keesun8" class="beanConfiguration.Member">
<property name="email" ref="email3" />
</bean>
<bean id="keesun9" class="beanConfiguration.Member">
<property name="email" ref="email3" />
</bean>
다음의 테스트를 통해서 email3 bean이 참조 대상 마다 생긴 것을 확인 할 수 있습니다.
Member keesun8 = getMember("keesun8");
Member keesun9 = getMember("keesun9");
Email email8 = keesun8.getEmail();
Email email9 = keesun9.getEmail();
assertNotSame(email8, email9);
}
번외.. ref 에서 자동 완성 기능 사용 시 스크린 샷
역시.. 좋아요.