병갈이 블록

1-02.팩토리 방식의 스프링 빈 설정 본문

IT(Old)/Spring 공부 기록

1-02.팩토리 방식의 스프링 빈 설정

woojang 2017. 7. 20. 23:02

1. static 메서드를 사용해서 객체를 생성할 경우.

- 자신의 객체를 반환하는 static메서드를 만든다.

class Test{

public static Test instance(){

return new Test();

}

}

위 클래스는 아래와 같이 객체를 얻는다.

Test firstTest = Test.instance();


- XML에 빈 객체 등록 시 <bean>태그에  factory-method 속성을 이용하여 인스턴스를 생성하는 메서드를 추가한다. 

(위 클래스의 경우 <bean id="..."....... factory-method="instance"> )

- 생성자 인수 및 프로퍼티 매개변수가 필요하다면 빈 등록때와 같이 하면 된다.


** 무슨 말이냐 하면, A클래스를 빈에 등록시킨다고 할 때, A클래스의 인스턴스를 어떻게 얻을 것인가 하는 것이다.

** 일반적인 생성자나 프로퍼티로 등록을 하지 않고 A클래스 내부에서 인스턴스를 반환하는 static매서드를 

** 등록한다.


2. FactoryBean 인터페이스를 이용하여 객체를 생성.

- FactoryBean<T> 인터페이스의 메서드

 T getObject()  : 클래스 객체를 반환하는 메서드. 이 메서드에서 반환된 객체가 빈 객체로 사용된다.

Class<?> getObjectType() : 객체의 타입 리턴.

boolean isSingleton() : 객체가 매번 동일한 객체를 반환하는지 여부.


class TestSecondBean implements FactoryBean<TestSecond>{

private TestSecond testsec;

...        //초기화에 필요한 맴버변수 및 프로퍼티.


poublic TestSecond getObject() throws Exception{

if( this.testsec != null ){

return this.testsec;        //이미 객체가 있으면 기존의 객체를 반환.

}

.....                    // 기존에 생성된 객체가 없을시 수행할 각종 초기화 작업들.

return this.testsec;    // 새로 생성된 객체를 반환.

}

}


- XML에 등록은 다른 빈을 등록할때와 같다. 필요한 초기화 작업은 프로퍼티에 값을 지정하여 설정한다.

- FactoryBean 인터페이스를 구현한 클래스는 스프링이 getObject에서 반환된 객체빈 객체로 사용한다.

- java코드 설정으로 사용할 때 위 객체를 다른 메서드에서 사용하려면, 단순히 메서드 내부에서 객체를 생성하는 행위로

끝나는 것이 아니라 상속받아 재 구현한 .getObject()메서드를 호출해서 객체를 구해야 한다.



Comments