메소드 삽입

Spring/Core 2007. 12. 14. 12:05
컨테이너에서 관리되는 대부분의 bean들은 singleton일 것입니다.
singleton bean이 non-singleton bean 과 의존성을 가진다면 non-singleton bean도 의도와 다르게 singeton으로 관리 되는 문제가 생깁니다.
아래 설정이 문제가 생기는 경우 입니다.

foo 의 scope는 prototype이지만 bar에서는 항상 같은 bean을 참조 할 것입니다. bar 자체가 단 하나만 생성되기 때문 입니다. 서로 다른 scope의 문제를 해결하기 위해 몇몇 방법이 있습니다.

첫번째 방법은 LifeCycle 인터페이스들 중의 하나인 BeanFactoryAware를 사용 하는 것 입니다. BeanFactoryAware 인터페이스를 구현한 bean은 생성이 되고 나서 콜백메소드 setBeanFactory(BeanFactory beanFactory) 를 통해 BeanFactory가 주입 됩니다. foo를 가져오는 getFoo() 메소드에서 beanFactory.getBean("foo") 를 이용한다면 항상 새로운 foo를 얻을 수 있습니다. 하지만 이 방법은 Spring API에 의존적이므로 좋은 방법은 아닙니다.

두번째 방법은 <bean /> 요소의 자식 요소인 <lookup-method /> 요소를
사용 하는 것입니다. 이 것은 bar에 대한 Proxy객체를
CGLIB를 이용하여 만드므로 CGLIB가 클래스패스에 존재 해야 합니다. 이 방법은 Spring API에 전혀 의존적이지 않습니다.

'Spring > Core' 카테고리의 다른 글

<aop:scoped-proxy /> 작동 방식  (5) 2007.12.14
Bean scopes  (0) 2007.12.14
메소드 삽입  (0) 2007.12.14
Autowiring  (0) 2007.12.10
lazy-init 속성  (0) 2007.12.10
간략화 된 설정  (0) 2007.12.10
Posted by 째코

댓글을 달아 주세요