2020.04.24 TIL 스프링 - Bean Scope Detail with Annotation

Bean은 특별한 지정 값이 없으면 언제나 싱글톤으로 만들어진다.

https://everupgrade.blogspot.com/2020/04/20200408-bean-lifecycle-annotation-bean.html

그런데 이 설정을 굳이 xml이 아닌 Bean Class에서 편하게 할 수 있다.

```
@Component
@Scope(singleton(default) or prototype(매번 새로운 객체 생성) or global(용어는 확실치않음. flask g처럼 동작 등)
public class Bean... (대충 bean 클래스)
```

init, destroy hook도 마찬가지이다.

```
@Component
public class Bean... (대충 bean 클래스)
 
  @PostConstruct
  public String initMethod() {..대충 bean 함수}

  @PreDestroy
  public String destroyMethod() {..대충 bean 함수}


```

주의사항

prototype은 PreDestroy Annotation이 동작하지 않는다. 다른 Scope들은 모두 관리가 되는데 prototype은 스프링 컨테이너가 생성까지만 관여하고 destroy는 관여하지 않는다.

만약 prototype bean에 destroy 훅을 달고 싶으면 Bean이 DisposableBean interface를 구현하고 해당 인터페이스가 제공하는 destroy() 함수를 구현해야한다고 한다.

참고소스:  destroy-protoscope-bean-with-custom-processor.zip

댓글

이 블로그의 인기 게시물

로컬 Tomcat 서버 실행속도 개선

2019.05.23 - SQLAlchemy 의 객체 상태 관리 (expire, refresh, flush, commit) 에 관한 이해

2020.02.17 Python의 multiprocessing 중 Pool.map(), chunksize에 관한 내용