ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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

     

Designed by Tistory.