Spring/Spring_CoreTechnologies

SpringFrameWork CoreTechnition_section1_4부

whyWhale 2020. 11. 17.

Scope of Bean

 

 

  • 스코프 : 모든 빈들이 가지고 있는 것. (대표적으로 싱글톤(default)과 프로토타입이 있음.)

싱글톤 : 애플리케이션 전반에 걸쳐 해당 빈의 인스턴스가 오직 하나인 것.

 

 둘다 @Component 라고 표기했기 때문에 기본 값이 싱글톤이므로 같은 값이 도출됩니다.

 

 

프로토타입 : 해당 인스턴스가 계속 새로운 인스턴스 객체 생성. (스레드에 사용될 것같다.)

@Component @Scope("prototype") 표기를 바꾸고 출력시 prototype 의 값들은 새로운 인스턴스를 생성하므로 값이 다르지만 single의 값은 모두 같습니다.

*주의* 스레드세이프한 방법으로 코딩해야 합니다.

싱글톤은 프로퍼티가 공유가 됩니다.

여러 곳에서 고치면 스레드 세이프 보장받지 않습니다.(멀티스레드 환경)

 

 

  • 프로토타입이 싱글톤 빈을 참조하면?   -> 아무 문제 없음.

프로토타입은 매번 새로운 인스턴스이지만 싱글톤은 매번 같은 객체니깐 상관은 없습니다!

 

  • 싱글톤 빈이 프로토타입 빈을 참조하면?  -> 안됨.

프로토타입의 스코프가 변경되지 않는 문제가 발생. 바뀌지 않습니다.

 

-> 싱글톤 빈이 프로토타입 빈을 참조할 시 오류 Solution

-scoped-porxy :  @Scope(value = "prototype",proxyMode = ScopedProxyMode.TARGET_CLASS

                    클래스 기반 proxy로 감싸라 ! 라고 설정한 것.  왜 감싸야 하나?

                    다른 스코프의 빈을 직접 참조하면 바뀌지 않아 proxy를 거쳐가야 하므로 매번 바꿀 수 있는 proxy로                       감싸는 겁니다.         (proxy 는prototype 을 상속하여 만들어서 주입이 가능합니다.) _AOP 자세히.

-Object-provider...

-Provider(표준)... 

 

프록시란? - 네트워크 부분에서 흔히 사용되는 용어로 대리 라는 의미를 가집니다. 두 점 사이 통신 할경우 중계기로서 대리 통신을 수행하는 기능을 프록시 또는 프록시 서버라고 합니다.

 

 

싱글톤 이외에 쓸일이 없을것 같지만 만약 생긴다며 스코프가 넓은(싱글톤)곳에서 짧은 생명주기(스코프를)가진 부분에주입받을 때에 유용할 것 같습니다.

 

 

 

 

댓글