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
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
댓글
댓글 쓰기