반응형
스프링 빈(Bean) 스코프(Scope) 에 대해서 알아보자
- 스프링 빈은 여러 스코프로 생성할 수 있음.
- 기본
- 싱글톤(Singleton)
- 싱글톤 빈의 인스턴스는 하나.
- 요청(request)과 관련된 데이터를 포함할 수 없음.
- 싱글톤 빈의 인스턴스는 하나.
- 싱글톤(Singleton)
- 기본
- 스코프(Scope) 는 모든 스프링 빈에서 아래 어노테이션과 함께 제공될 수 있음.
- @Scope
- 예시
- @Scope
- 그럼, 다양한 스코프에 대해서 알아보자.
-
스코프 설명 비고 싱글톤(Singleton)
- 기본적으로 모든 빈의 스코프는 싱글톤임.
- 스프링 IoC 컨테이너 인스턴스당 오직 하나의 빈 인스턴스만 사용됨.
- 빈에 대한 여러 참조가 있더라도, 컨테이너당 한번만 작성됨.
- 싱글톤 인스턴스는 캐싱돼 이 빈을 사용하는 모든 후속 요청에 사용됨.
- 스프링 싱글톤 스코프가 하나의 스프링 컨테이너당 하나의 객체라는 것을 지정하는 것이 중요함.
- 단일 JVM에 스프링 컨테이너가 여러개 있는 경우, 동일한 빈의 인스턴스가 여러 개 있을 수 있음.
- 즉, 스프링 싱글톤의 스코프는 일반적인 정의와 조금 다름.프로토타입(Prototype) - 스프링 컨테이너에서 빈이 요청될 때 마다 새로운 인스턴스가 생성됨.
- 즉, 빈에 상태가 포함돼 있는 경우, 해당 프로토타입 스코프를 사용하는 것이 좋음.리퀘스트(Request) - 스프링 웹 콘텍스트에서만 사용할 수 있음.
- 즉, 모든 HTTP 요청마다 빈의 새 인스턴스가 작성됨.
- 빈은 요청 처리가 완료되는 즉시 폐기됨.
- 즉, 단일 요청과 관련된 데이터를 보유하고 있는 빈에 이상적임.세션(Session) - 스프링 웹 콘텍스트에서만 사용할 수 있음.
- 모든 HTTP 세션마다 빈의 새로운 인스턴스가 생성됨.
- 즉, 웹 애플리케이션의 사용자 권한과 같이 단일 사용자 고유의 데이터에 적합함.어플리케이션(Application) - 스프링 웹 콘텍스트에서만 사용할 수 있음.
- 웹 애플리케이션당, 하나의 빈 인스턴스로 특정 환경의 애플리케이션 구성에 적합함.
-
그럼, 중요한 어노테이션에 대해서 알아보자.
- 첫째,
- @Autowired 어노테이션
- Autowired 어노테이션을 의존성에 사용하면, 애플리케이션 콘텍스트는 자동으로 일치하는 의존성을 검색함.
- 기본적으로 Autowired 되는 모든 의존성이 필요함.
- 아래의 경우에 대해 나눠어 진다.
- 첫째, 일치하는 항목이 1개 있을 경우
- 찾고 있는 의존 항목
- 둘째, 일차하는 항목이 2개 이상 발견될 경우
- Autowiring 실패
- 그럼, 해결책에 대해서 알아보자.
- 후보 중 하나만 사용하려면 @Primary 어노테이션을 사용하면됨.
- Autowiring 을 강화하려면, @Qualifier 를 사용하면됨.
- 암튼, 2개의 어노테이션에 대해서 밑에서 더욱 자세히 알아볼께요.
- 그럼, 해결책에 대해서 알아보자.
- Autowiring 실패
- 셋째, 일치하는 항목이 없을 경우
- Autowiring 실패
- 첫째, 일치하는 항목이 1개 있을 경우
- 아래의 경우에 대해 나눠어 진다.
- 기본적으로 Autowired 되는 모든 의존성이 필요함.
- Autowired 어노테이션을 의존성에 사용하면, 애플리케이션 콘텍스트는 자동으로 일치하는 의존성을 검색함.
- @Autowired 어노테이션
- 둘째,
- @Primary 어노테이션
- 특정 의존성을 Autowiring할 수 있는 후보가 둘 이상 존재하면, @Primary 어노테이션을 사용한 빈이 호출됨.
- 자세한 사항은 예시를 통해서 알아보자.
- 예시
- @Primary 어노테이션
- 설명
- 위의 예제의 경우 2가지 Subject 을 사용할 수 있음.
- 구성요소 검사가 두 요소를 모두 찾으면, JavaSubject는 @Primary 어노테이션 때문에 ThubSubject에 대한 의존성을 연결하는 데 사용됨.
- 셋째,
- @Qualifier 어노테이션
- 스프링빈에 대한 참조를 주기 위해 사용됨.
- 즉, 이 참조는 Autowired할 필요가 있는 의존성을 한정하는 데 사용됨.
- 자세한 것은 예시를 통해서 알아 보자.
- 예시
- 스프링빈에 대한 참조를 주기 위해 사용됨.
- @Qualifier 어노테이션
- 설명
- 위의 예시에서 JavascriptSubject 와 JavaSubject 라는 2가지 Subject 를 사용할 수 있음.
- but, SomeThubService클래스에서는 @Qualifier("javascriptsubject")가 사용됐기 때문에, javascriptsubject 한정자(Qualifier)를 가진 JavascriptSubject 는 Autowiring을 위해 선택된 후보 의존성이 됨.
- 위의 예시에서 JavascriptSubject 와 JavaSubject 라는 2가지 Subject 를 사용할 수 있음.
그럼, 기타 중요한 스프링 어노테이션에 대해서 알아보자.
- 스프링은 빈(Bean)을 정의하고, 빈의 생명 주기를 관리하는데 많은 유연성을 제공함.
- 그럼 본격적으로 기타 중요한 어노테이션에 대해서 알아보자
- 첫째,
- @ScopedProxy 어노테이션
- 요청이나 세션 스코프의 빈을 싱글톤 스코프의 빈에 주입해야 하는 경우가 있음.
- 즉, 해당 어노테이션은 이러한 상황에서 단일 스코프 빈에 주입되는 스마트 프록시를 제공함.
- @ScopedProxy 어노테이션
- 둘째,
- @Component, @Controller, @Service, @Repository 어노테이션
- @Component 어노테이션
- 스프링 빈을 정의하는 가장 일반적인 방법
- @Controller 어노테이션
- 프레젠테이션 구성요소에 사용됨.
- @Service 어노테이션
- 비즈니스 서비스 레이어에서 사용됨.
- @Repository 어노테이션
- 데이터 액세스 객체에서 사용됨.
- @Component 어노테이션
- @Component, @Controller, @Service, @Repository 어노테이션
- 셋째,
- @PostConstruct 어노테이션
- 모든 스프링 빈에서 해당 어노테이션을 사용해 post construct 메소드를 제공함.
- 해당 메소드는 빈이 의존성으로 완전히 초기화된 후에 호출됨.
- 참고로, 빈 생명 주기 동안 한번 만 호출됨.
- 해당 메소드는 빈이 의존성으로 완전히 초기화된 후에 호출됨.
- 모든 스프링 빈에서 해당 어노테이션을 사용해 post construct 메소드를 제공함.
- @PostConstruct 어노테이션
- 넷째,
- @PreDestory 어노테이션
- 스프링 빈에서 해당 어노테이션을 사용해 predestory 메소드를 제공함.
- 해당 메소드는 빈이 컨테이너에서 제거되기전에 호출됨.
- 즉, 빈에 의해 보유된 자원을 해제하는 데 사용됨.
- 해당 메소드는 빈이 컨테이너에서 제거되기전에 호출됨.
- 스프링 빈에서 해당 어노테이션을 사용해 predestory 메소드를 제공함.
- @PreDestory 어노테이션
- 첫째,
결론
- 스프링 빈은 여러 스코프로 생성할 수 있음
- 기본은 싱글톤 스코프
- 그외에 스코프는, 프로토타입, 리퀘스트, 세션, 애플리케이션 이 있음.
- 알아두어야할, 아래와 같은 중요한 어노테이션에 있음.
- @Autowired / @Primary / @Qualifier
- 그외의 추가적으로 아래 어노테이션도 알아두어야 함.
- @ScopedProxy / @Component, @Controller, @Service, @Repository / @PostConsturct / @PreDestory 등등
- 오늘도 스프링 빈의 스코프와 알아두어야할 어노테이션에 대한 지식에 대한 마술(?) 한가지 획득완료! 감사합니다. ^^
300x250
'좋아하는 것_매직IT > 1.spring' 카테고리의 다른 글
10.Spring, 그럼 스프링 MVC 아키텍처가 어떻게 동작을 하는지 간단하게 알아볼까요? (0) | 2021.01.02 |
---|---|
9.Spring, 자바(JAVA) 관련 웹 애플리케이션 아키텍처와 스프링 MVC에 대해서 알아보자. (0) | 2021.01.02 |
7.Spring, 의존성 주입(dependency injection) 타입에 대해서 알아봅시다. ^^ (0) | 2021.01.02 |
6.Spring, 스프링 IoC 컨테이너에 대해서 이해한번 해봅시다. ^^ (0) | 2021.01.02 |
5.Spring, 의존성 주입에 대해서 이해한번 해봅시다. ^^ (0) | 2021.01.02 |