본문 바로가기

Java/Spring Framework

Scope

반응형

저희가 만든 모든 bean은 모두 scope을 가지고 있습니다. 

scope 은 크게 '싱글톤' , '프로토타입'으로 나눌 수 있습니다.

 

  • 싱글톤: 해당 bean의 인스턴스가 오직 하나뿐입니다.
  • 프로토타입: 매번 새로운 객체를 새로운 인스턴스를 만들어서 사용해야하는 scope입니다.

그림을 통해 프로토타입을 자세히 보겠습니다.

프로토타입의 Proto 클래스와 싱글톤타입의 Single 클래스를 만들겠습니다.

그런 후에 아래와 같이 각 빈을 호출해보면 Proto는 매번 다른 인스턴스를 만들어서 보여주는 것을 볼 수 있으며 Single은 항상 같은 인스턴스를 보여주고 있습니다.

 

Singleton 타입의 Bean에서 Prototype 스콥의 Bean을 사용할때에는 주의를 기울여야합니다.

왜냐하면 Singletone 타입의 Bean은 한번만 생성되는데 그때 이미 Prototype 스콥의 Bean의 프로퍼티가 설정되기 때문입니다. 따라서 Prototype 스콥의 Bean의 프로퍼티가 변경되지 않습니다.

 

이를 해결하는 방법은 proxyMode 를 설정해주는 것입니다. 

default 로 설정된 값은 proxy 를 사용하지 않는다는 옵셥입니다.

 

위에서 설정한 proxy 는 Class 기반의 proxy 로 감싸서 설정해라는 의미입니다.

즉, Singleton 의 인스턴스들이 직접 참조하지 않고 proxy 를 거쳐서 참조하게 해주는 것입니다. 

직접 쓰면 매번 prototype 을 바꿔줘야하는데 그럴 수 없기 때문에 proxy 를 이용해서 감싸주는 것입니다. 

 

다른 방법으로는 ObjectProvider 에 prototype 객체를 넣어 생성하는 방법이 있습니다.

싱클톤 객체를 사용할때 프로퍼티가 공유됨을 잊지말고 thread-safe 방법으로 코딩해야함을 기억해야합니다~ 

반응형

'Java > Spring Framework' 카테고리의 다른 글

ApplicationEventPublisher & ResourceLoader  (0) 2020.10.25
Environment  (0) 2020.10.24
Autowired & Component  (0) 2020.10.18
기본 개념 Spring  (0) 2020.10.15
RESTful API 웹서비스 테스트  (0) 2020.03.11