Spring 라 이 프 사이클 의 bean 의존 주입

Spring IoC 용 기 는 대상 을 초기 화 할 뿐만 아니 라 서로 협력 하 는 bean 이나 의존 도 를 연결 합 니 다. HTTP request 의 bean 을 다른 bean 에 주입 하려 면 이 bean 에 AOP 대 리 를 주입 해 야 합 니 다. 이 대 리 는 이 bean 과 같은 인 터 페 이 스 를 가지 고 있 습 니 다. 이 API 를 호출 할 때,실제 호출 을 의뢰 합 니 다.왜 이렇게 해 야 하 는 지 에 대해 서 는 아래 의 예 를 볼 수 있다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<!-- an HTTP Session-scoped bean exposed as a proxy -->
<bean id="userPreferences" class="com.foo.UserPreferences" scope="session">
<!-- instructs the container to proxy the surrounding bean -->
<aop:scoped-proxy/>
</bean>
<!-- a singleton-scoped bean injected with a proxy to the above bean -->
<bean id="userService" class="com.foo.SimpleUserService">
<!-- a reference to the proxied userPreferences bean -->
<property name="userPreferences" ref="userPreferences"/>
</bean>
</beans>

이 프 록 시 를 만 들 기 위해 서 는 bean 에 이러한 요 소 를 삽입 하 였 습 니 다.프로 토 타 입 과 앞서 언급 한 session 의 scope 를 살 펴 보 자.
<bean id="userPreferences" class="com.foo.UserPreferences" scope="session"/>
<bean id="userManager" class="com.foo.UserManager">
<property name="userPreferences" ref="userPreferences"/>
</bean>

이 예 에서 userManager 는 scope 가 singleton 인 bean 이 고 그 에 게 Http session 주기 인 bean: userPreferences 를 주입 하 는 것 이 분명 하 다. userManager 는 용기 에 하나의 예 이다. 그 는 용기 에 한 번 만 예화 되 고 그의 의존 도 한 번 만 주입 된다.즉, 실제 userManager 는 매번 같은 userPreferences 대상 을 조작 한 다 는 것 이다.이렇게 되면 당신 이 원 하 는 결 과 를 어기 고 짧 은 생명주기 의 bean 을 긴 생명주기 의 bean 에 주입 하 는 것 입 니 다. 그러나 HttpSession 의 생명주기 를 고려 하기 위해 서 는 userPreferences 가 그의 생명주기 를 가리 키 도록 해 야 합 니 다. 따라서 용 기 는 userPreferences 와 같은 인 터 페 이 스 를 가 진 대리 대상 을 만 듭 니 다.그 는 진정한 userPreferences 작업 을 요청 할 것 입 니 다. 용 기 는 이 대 리 를 userManager 에 주입 합 니 다. 그러나 이 모든 것 은 userManager 에 투명 합 니 다. 그 가 userPreferences 를 호출 할 때 실제 대 리 를 호출 하고 대 리 는 실제 HttpSession 에서 userPreferences 를 얻 으 며 userPreferences 를 호출 하 는 방법 을 의뢰 합 니 다.
따라서, 당신 이 주입 하고 자 하 는 bean 의 scope 가 request, session 또는 globalSession 일 때, 정확 하고 완전한 쓰 기 는 다음 과 같 아야 합 니 다.
<bean id="userPreferences" class="com.foo.UserPreferences" scope="session">
<aop:scoped-proxy/>
</bean>
<bean id="userManager" class="com.foo.UserManager">
<property name="userPreferences" ref="userPreferences"/>
</bean>

여기까지 입 니 다. 실제로 상기 내용 은 프 록 시 디자인 모델 을 이해 하 는 좋 은 예 입 니 다!

좋은 웹페이지 즐겨찾기