kok202
Bean Singleton or Prototype

2019. 4. 18. 18:23[정리] 기능별 개념 정리/스프링 부트

* Elasticsearch 의 RestHighLevelClient는 Thread safe 하지 않다.

* Elasticsearch 의 RestHighLevelClient는 사용하고 나면 close() 메소드를 호출해줘야 안전하다.

@Bean
public RestHighLevelClient restHighLevelClient(){
      return new RestHighLevelClient(RestClient.builder(new HttpHost(host,port,"http")));
}

Bean 은 기본적으로 싱글톤이기 때문에 Thread safe 하지 못한 클래스는 등록하면 안된다.

더불어 RestHighLevelClient는 사용하고 나면 close를 해줘야하기 때문에 일반 Bean으로 적합하지 못하다.

 

 

 

 

 

@Bean(destroyMethod = "close")
@Scope("prototype")
public RestHighLevelClient restHighLevelClient(){
      return new RestHighLevelClient(RestClient.builder(new HttpHost(host,port,"http")));
}

Scope을 지정해주지 않으면 Bean은 Singleton 으로 동작한다.

Scope을 prototype으로 지정해주면 빈이 주입될 때마다 new 한다.

destory method = close 는 default 가 close 이므로 지정해주지 않아도 된다..

 

 

 

 

 

 

 

참조 : https://gmlwjd9405.github.io/2018/11/10/spring-beans.html

 

[Spring] Spring Bean의 개념과 Bean Scope 종류 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io