본문 바로가기

SpringFramework Core - I. IoC 컨테이너/3. Bean 개관

3.2.2. static 팩토리 메서드로 인스턴스화 하기

원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-class-static-factory-method

 

 

static 팩토리 메서드를 통해서 bean을 정의하려면, 'class' 속성을 통해 static 팩토리 메서드를 포함하는 클래스를 특정하면 된다. 그리고 'factory-method' 속성을 통해서 팩토리 메서드 자체의 이름을 특정한다. 그러면 이 메서드를 호출할 수 있게 되고(선택적 인자들과 함께) 그에 따라 객체를 반환받을 수 있다. 그리고 결과적으로 그 객체는 마치 생성자를 통해 생성된 것처럼 취급될 것이다. 이런 식으로 bean을 정의하는 것을 레거시 코드에서는 'static 팩토리'라고 부른다.

 

다음의 bean 정의는, 팩토리 메서드를 호출함으로써 bean이 생성되도록 설정하는 것이다. 정의에서는 반환되는 객체의 타입(클래스)을 특정하고 있지 않다. 단지 클래스가 팩토리 메서드를 포함하고 있을 뿐이다. 이 예시에서, 'createInstance()' 메서드는 반드시 static한 메서드여야 한다. 다음 예시는 어떻게 팩토리 메서드를 특정하는 지 보여준다.

<bean id="clientService"
      class="examples.ClientService"
      factory-method="createInstance" />

다음 예시는 위의 bean으로 정의된 클래스를 보여준다.

public class ClientService {

    private static ClientService clientService = new ClientService();
    private ClientService(){}
    
    public static ClientService createInstance(){
    	return clientService;
    }
}

팩토리 메서드에 인자를 제공하거나 팩토리로부터 객체를 반환받은 후에 프로퍼티를 세팅하는 것에 대해 자세히 알고싶다면 '의존성과 설정에 대한 상세'를 참고하라.