Whiteship's Note

'ObjectFactoryCreatingFactoryBean'에 해당되는 글 2건

  1. 2007.03.12 ObjectFactoryCreatingFactoryBean 사용 예
  2. 2007.03.12 BeanFactoryAware

ObjectFactoryCreatingFactoryBean 사용 예

Spring/Chapter 3 : 2007.03.12 11:44


앞의 예를 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);
    }



'Spring > Chapter 3' 카테고리의 다른 글

'만들 수 없는 것'을 FactoryBean으로 만들기  (2) 2007.03.14
BeanFactoryPostProcessor 사용 예  (0) 2007.03.13
BeanPostProcessor 사용 예  (0) 2007.03.13
3.7. Container extension points  (0) 2007.03.13
3.6. Bean definition inheritance  (0) 2007.03.12
ObjectFactoryCreatingFactoryBean 사용 예  (0) 2007.03.12
BeanFactoryAware 사용 예  (1) 2007.03.12
BeanFactoryAware  (0) 2007.03.12
init-method & destroy-method  (0) 2007.03.10
InitializingBean & DisposableBean  (0) 2007.03.10
Bean's Life Cycle  (0) 2007.03.10
top

Write a comment.


BeanFactoryAware

Spring/Chapter 3 : 2007.03.12 10:51


어떤 클래스에서 bean을 꺼낼(look up) 수 있는 factory가 필요하다면 BeanFactoryAware 인터페이스를 구현하거나.. 다른 방법도 있습니다.

 void setBeanFactory(BeanFactory beanFactory)

구현해야 할 메소드는 요고 하나 있습니다.

Reference에서는 이 인터페이스를 사용하는 것은 IoC답지 않고[각주:1] 소스코드가 Spring framwork에 종속성이 생기기 때문에 다른 방법을 사용한 예제를 보여 주고 있습니다.[각주:2]

3.3 맨 끝에서 Method Injection에 관한 부분에서 이게 필요한 상황이 나왔었습니다. 예를 들어 A가 singleton이고 B가 prototyp인데 A가 B를 가지고 있으면.. B는 prototype인데도 하나의 A가 한번만 만들어 지니까 A가 다른 bean에 참조 되거나 look up 됐을 때 마다 B가 새로 생기는게 아니라 기본에 만들어져있던 A를 계속 쓰게 되는 상황을.. BeanFactoryAware 인터페이스를 사용해서 해결할 수 있다고 했었습니다. 물론 그것 보다 더 좋은 방법은 Method Injection인데 아직 공부를 안해서 모르겠네요.

BeanFactoryAware 사용 예
ObjectFactoryCreatingFactoryBean 사용 예
  1. Dependency Lookup은 IoC답지 않은 것으로 생각하는 것 갔습니다. 어떤 책에서는 IoC 중에 DL과 DI가 있고 DI중에 Setter Injection과 Costructor Injection, Method Injection이 있다고 써놨던 것 같은데.. 햇갈리네요. [본문으로]
  2. ObjectFactoryCreatingFactoryBean 이것을 사용하여 설정 파일에서 DI를 사용하는 방법입니다. [본문으로]

'Spring > Chapter 3' 카테고리의 다른 글

BeanPostProcessor 사용 예  (0) 2007.03.13
3.7. Container extension points  (0) 2007.03.13
3.6. Bean definition inheritance  (0) 2007.03.12
ObjectFactoryCreatingFactoryBean 사용 예  (0) 2007.03.12
BeanFactoryAware 사용 예  (1) 2007.03.12
BeanFactoryAware  (0) 2007.03.12
init-method & destroy-method  (0) 2007.03.10
InitializingBean & DisposableBean  (0) 2007.03.10
Bean's Life Cycle  (0) 2007.03.10
The IoC container  (0) 2007.03.10
3.5. Customizing the nature of a bean  (0) 2007.03.10
top

Write a comment.