앞의 예를 Reference 3.5.2.1 에서 사용한 ObjectFactoryCreatingFactoryBean를 사용하도록 수정하겠습니다.

1. Member에서 BeanFactoryAware 인터페이스를 구현하는 내용을 제거 합니다.
2. ticketFactory의 type을 ObjrctFactory로 바꿉니다.
3. getTicket메소드의 구현을 바꿉니다.
4. 설정 파일에서는 대신 많은 일을 해줘야 겠습니다.(Member에 factory연결하고 factory에서는 어떤 객체 넘겨 줄지 설정이 필요할 것 같네요.)

public class Member {
...
    private ObjectFactory ticketFactory;
...
    public void setTicketFactory(ObjectFactory ticketFactory) {
        this.ticketFactory = ticketFactory;
    }
...
    public Ticket getTicket() {
        return (Ticket)ticketFactory.getObject();
    }
}

구현 부분은 저번이랑 비슷하지만 자세히 보면 좀 다릅니다. 이제 설정 부분을 바꿔 줍니다.

    <bean id="keesun12" class="beanConfiguration.Member">
        <property name="ticketFactory">
            <bean
class="org.springframework.beans.factory.config.ObjectFactoryCreatingFactoryBean">
                <property name="targetBeanName">
                    <idref local="ticket" />
                </property>
            </bean>
        </property>
    </bean>

    <bean id="ticket" class="beanConfiguration.Ticket" scope="prototype" />

설정 부분은 저번보다 훨씬 복잡해 진것 같지만...하늘색 부분을 빼곤 템플릿 처럼 사용되는 부분입니다.

이렇게 하면 저번 테스트 였던 아래 코드가 녹색으로 통과 하는 것을 확인할 수 있습니다.

    @Test public void singlePrototype(){
        Member keesun12 = getMember("keesun12");
        Ticket ticket1 = keesun12.getTicket();
        Ticket ticket2 = keesun12.getTicket();
        assertNotSame(ticket1, ticket2);
    }