FactoryBean에게 불가능이란 없습니다.
기존의 XML문서에 정의된 bean들은 생성자 삽입과 setter 삽입에 의해 생성 되었습니다.
하지만 이러한 조건으로 모든 bean을 생성하기엔 불가능한 상황도 있습니다. 예를들어 private 생성자를 가지고 있거나 setter가 없거나... 이런 경우는 어떻게 생성을 할 수가 없습니다. 더불어 복잡한 로직에 의한 객체생성 또한 제한적입니다. 하지만 FactoryBean은 다릅니다. 기존의 XML설정으로
불가능 했던 복잡한 로직들을 이용해 자체적인 Factory 기능으로 bean을 생성 합니다.

구현해야 할 메소드는 다음과 같습니다.

public Object getObject()        : 이 factory가 생성 하는 객체를 반환 합니다.
public Class getObjectType()  : getObject()로 생성되는 객체의 타입을 반환 합니다. 만약 타입을 알 수                                              없을 경우 null을 반환 합니다.
public boolean isSingleton()   : getObject()로 생성되는 객체의 관리방식을 반환 합니다.

Spring에서는 다른 프레임워크와의 쉬운 통합을 위해 수많은 FactoryBean 구현체들이 존재 합니다.
그중의 하나인 SqlMapClientFactoryBean은 iBatis의 다소 복잡한 sqlMapClient 생성 로직이 포함되어 간단한 xml 설정만으로 sqlMapClient를 쉽게 생성해 줍니다.

간단한 예제를 보겠습니다.
FactoryBean을 구현한 클래스 와 XML 설정 입니다.


출력결과
FooFactory 생성
Foo 생성
jjaeko.Foo@4a9387
jjaeko.FooFactory@1b86c7

타입이 FooFactory지만 실제로 내부에서 생성된 Foo 인스턴스를 리턴 합니다. 만약 FactoryBean 자체의 인스턴스를 얻고 싶다면 위 예제에서 알 수 있듯이 빈이름 앞에 "&"를 붙이면 됩니다.

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

ApplicationContext의 초기화 과정  (2) 2007.12.20
MessageSource 사용하기(다국어 지원)  (0) 2007.12.19
불가능은 없다. FactoryBean  (0) 2007.12.19
LifeCycle 확장  (0) 2007.12.17
LifeCycle  (0) 2007.12.17
<aop:scoped-proxy /> 작동 방식  (5) 2007.12.14
Posted by 째코

댓글을 달아 주세요