1. Scope proxy의 필요성
- Bean에 독립적인 상태를 저장해두고 싶을 때 사용할 수 있다. DI는 유일한 오브젝트를 반환하기 때문에 bean에 독립적인 상태를 저장해두기에는 부적합하다.
- 직접 scope bean을 DI 받는 대신에 scope bean에 대한 proxy를 DI 받는 방식이다. proxy에서는 bean에 설정된 scope에 맞게 bean 오브젝트를 알아서 넘겨준다.
- 예를 들어, singleton scope bean에서 session scope bean을 DI 받아야 하는 경우를 생각해보자. singleton scope bean에서는 session scope bean을 DI 받더라도 하나의 오브젝트밖에 할당되지 않기 때문에 사용자마자 다른 정보를 가지고 있을 수 없다. 이 때 scope proxy를 사용하면 서로 다른 session scope bean들을 DI 받을 수 있게 된다.
- Scope proxy는 실제 scope 오브젝트를 상속하기 때문에 해당 scope 오브젝트 타입으로 사용될 수 있다.
2. Scope proxy 설정
- 유저의 로그인 정보를 저장해두는 UserLogin 클래스를 bean으로 만들고 scope를 session으로 설정한 뒤, scope proxy를 설정하는 예시이다.
1) Xml 방식
<bean id="userLogin" class="a.b.c.UserLogin" scope="session">
<aop:scoped-proxy proxy-target-class="true"/>
</bean>
2) Annotation 방식
@Component
@Scope(value="session", proxyMode=ScopedProxyMode.TARGET_CLASS)
public class UserLogin {
...
}
※ DI 받는 쪽에서 클래스가 아닌 인터페이스를 DI 받는다면 proxyMode를 ScopedProxyMode.INTERFACES로 지정한다.
3. Scope proxy 사용
- Singleton bean을 사용하는 것 처럼 보이지만 내부적으로는 서로 다른 오브젝트들이 생성될 것이다.
@Autowired UserLogin userLogin;
● 참고 자료 : 토비의 스프링 3.1 Vol.2
'Spring Series > Spring Framework' 카테고리의 다른 글
[Spring] .gitignore 적용하기 (0) | 2022.06.29 |
---|---|
[Spring] Bean의 id와 name (0) | 2022.06.23 |
[Spring] Prototype Bean (0) | 2022.06.23 |
[Spring] RestTemplate 한글 깨짐 해결방법 (0) | 2022.06.22 |
[Spring] SpEL (0) | 2022.06.21 |
댓글