-
[Spring] Bean Scope개발/Spring 2021. 11. 4. 00:02
Spring에서 Bean이라고 함은 쉽게 표현한다면 인스턴스라고 말할 수 있다. 사실 인스턴스라고 말하기에는 좀 다르다는 것을 스프링을 공부하다보면 느낄 수 있다. 하지만 쉽게 인스턴스라고 생각하고 그 좀 다름에 대해서는 스프링을 공부하면서 체감하는 것이 좋다.
Spring 에서의 Bean은 Scope라는 것을 가진다. 이 Scope는 일반적으로 생각하는 코드의 Scope와는 조금 다르다. Bean의 Scope는 총 5가지가 있다.
Singleton(default) Prototype Request Session Global Session 기본값인 싱글톤은 싱글톤 처럼 작동하며 실제 Bean을 생성해 주소를 비교해보면 싱글톤임을 알 수 있다. 그리고 다음인 프로토타입은 빈을 생성 할 때마다 새로운 인스턴스로 생성해주는 Scope이다.
이후의 Scope(이하 스코프) 들은 설명만 하자면
- Request -> HTTP Request에 의해 정의
- Session -> HTTP Session에 의한 정의
- Global Session -> Http Global Session에 의해 정의
간단하게 설명한 것처럼 잘 안쓰이는 듯 하다.
이 중에서 조금은 특이한 것이 있는데 SrpingFramework에는 Bean의 생명주기에 따라 실행되는 메소드를 만들 수 있다. Java9 이상에서는 라이브러리를 추가해줘야하는데 이는 첨부파일로 첨부하겠다. 그 어노테이션이 바로 @PostConstruct, @PreDestroy 이다. 이 어노테이션을 추가해주면 빈이 생성되고 없어질때 메소드가 자동 실행되는 것을 확인할 수 있다.
이 라이프사이클을 따라가는 어노테이션 중 @PreDestroy는 조금 주의할 필요가 있다. Bean 스코프의 호출때마다 새로운 인스턴스를 내주는 Prototype의 경우 @PreDestroy 어노테이션이 작동하지 않는 것을 확인할 수 있다. 따라서 만약 prototype 스코프를 사용한다면 이점을 주의해야 한다.
첨부파일
https://search.maven.org/remotecontent?filepath=javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.jar
'개발 > Spring' 카테고리의 다른 글
[Hibernate] One-to-many, 외래키가 null (0) 2021.11.09 [Spring-hibernate] Cascade 종류 (0) 2021.11.06 [Spring-Hibernate] cretaeQuery, is not mapped 에러 (0) 2021.11.06 [Spring] Autowired (0) 2021.11.03 Spring boot를 하기위해 Spring을 시작하기로 했다. (0) 2021.11.03