2013-03-30 2 views
0

나는 (Elasticsearch에서) Client의 인스턴스를 생성하는 bean을 만들고 싶다. 그러나 Spring에서 Factory Bean을 구성하지 않았기 때문에 읽은 후에 바로 가져 왔는지 궁금합니다. 연결은 한 번만 열리고 닫히기 때문에 응용 프로그램이 종료 될 때 close 메서드를 호출하기 때문에 정적 버전 대신 factory-bean 속성을 사용해야한다고 생각합니다. class 속성을 사용할 때 close 메소드를 호출 할 수 없었습니다.Spring에서 factory 클래스 사용하기

올바른 사용법인가요? 하나의 팩토리와 단 하나의 연결 만 원하고 클라이언트가 종료 될 때 클라이언트에서 close를 호출하려고합니다.

<bean id="clientFactory" class="my.company.ClientFactory" destroy-method="close" /> 
<bean id="searchClient" factory-bean="clientFactory" factory-method="getClient" /> 

공장 :

public class ClientFactory { 

    private Client client; 

    public Client getClient() { 

     if (client != null) { 
      return client; 
     } 

     Client transportClient = new TransportClient().addTransportAddress(new InetSocketTransportAddress("localhost", 9300)); 
     client = transportClient; 

     return client; 
    } 

    public void close() { 
     client.close(); 
    } 
} 
+0

다음을보십시오 : https://github.com/dadoonet/spring-elasticsearch – dadoonet

+0

맞아요, 작동 했습니까? 당신이 싱글 톤을 강요하는 방식이 과잉이라고 생각합니다. Spring은 bean에서 "범위"개념을 가지고 있으며, 기본값은 singleton입니다. 즉, Spring은 동일한 인스턴스를 계속 재사용합니다. – jeff

+0

@jeff 공장에서의 Singleton 그렇지만 인스턴스화 할 때 공장 내부의 클라이언트에 대해 어떻게 생각하십니까? – LuckyLuke

답변

0

그것은 충분히 가까이 보인다. 실행에 의한 유효성 검사를 권장합니다. 어쩌면 그것을 테스트하기위한 코드를 작성하십시오. 그것은 누군가를 여기에서 얻는 것보다 빠를 것입니다.

관련 문제