본문 바로가기
  • 실행력이 모든걸 결정한다
Spring Series/Spring Framework

[Spring] Scope Proxy

by 김코더 김주역 2022. 6. 23.
반응형

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

댓글