SpringFrameWork CoreTechnition_section1_4부
Scope of Bean
- 스코프 : 모든 빈들이 가지고 있는 것. (대표적으로 싱글톤(default)과 프로토타입이 있음.)
싱글톤 : 애플리케이션 전반에 걸쳐 해당 빈의 인스턴스가 오직 하나인 것.
프로토타입 : 해당 인스턴스가 계속 새로운 인스턴스 객체 생성. (스레드에 사용될 것같다.)
*주의* 스레드세이프한 방법으로 코딩해야 합니다.
싱글톤은 프로퍼티가 공유가 됩니다.
여러 곳에서 고치면 스레드 세이프 보장받지 않습니다.(멀티스레드 환경)
- 프로토타입이 싱글톤 빈을 참조하면? -> 아무 문제 없음.
프로토타입은 매번 새로운 인스턴스이지만 싱글톤은 매번 같은 객체니깐 상관은 없습니다!
- 싱글톤 빈이 프로토타입 빈을 참조하면? -> 안됨.
프로토타입의 스코프가 변경되지 않는 문제가 발생. 바뀌지 않습니다.
-> 싱글톤 빈이 프로토타입 빈을 참조할 시 오류 Solution
-scoped-porxy : @Scope(value = "prototype",proxyMode = ScopedProxyMode.TARGET_CLASS )
클래스 기반 proxy로 감싸라 ! 라고 설정한 것. 왜 감싸야 하나?
다른 스코프의 빈을 직접 참조하면 바뀌지 않아 proxy를 거쳐가야 하므로 매번 바꿀 수 있는 proxy로 감싸는 겁니다. (proxy 는prototype 을 상속하여 만들어서 주입이 가능합니다.) _AOP 자세히.
-Object-provider...
-Provider(표준)...
프록시란? - 네트워크 부분에서 흔히 사용되는 용어로 대리 라는 의미를 가집니다. 두 점 사이 통신 할경우 중계기로서 대리 통신을 수행하는 기능을 프록시 또는 프록시 서버라고 합니다.
싱글톤 이외에 쓸일이 없을것 같지만 만약 생긴다며 스코프가 넓은(싱글톤)곳에서 짧은 생명주기(스코프를)가진 부분에주입받을 때에 유용할 것 같습니다.