봄 부모-자식 용기
봄의 일반적인 맥락 컨테이너는 아버지와 아들, 부모 용기 및 자식 용기로 나눌 수 있습니다. ** 부모 컨테이너는 하위 컨테이너에 보이고 어린이 컨테이너는 모 컨테이너 **에 보이지 않습니다. **.
전통적인 스프링 MVC의 경우, 스프링 MVC 컨테이너는 하위 컨테이너, 즉 ServletDispatcher에 해당하는 컨테이너는 하위 컨테이너이며 web.xml의 구성은 ConextLoaderListener의 ContextConfiglocation 속성을 통한 부모 컨테이너입니다.
아버지와 아들 용기의 시나리오를 사용하십시오
아버지-아들 컨테이너의 주요 목적은 컨텍스트 격리입니다. 다음 시나리오 중 하나를 고려하십시오.
Project-API는 프로젝트 서비스의 일부 방법을 장식하고 고객 서비스 장식과 같은 방법을 장식해야합니다. 장식 된 클래스는 캐시 슈토머 서비스입니다. 따라서 이제 프로젝트 -API에는 두 개의 고객 서비스가 포함되어 있습니다. 하나는 프로젝트 서비스의 고객 서비스이고 다른 하나는 캐시 슈토 머 서비스입니다. 현재 프로젝트 -API 프로젝트의 모든 구성 파일이 컨텍스트를 통해로드되면 문제가 필연적으로 발생합니다 (일반적인 관행은 가져 오기 태그를 사용하여 모두 가져 오는 것입니다). 프로젝트의 Payservice가 다음과 유사한 @Resource 표준을 통해 CustomersIrvice에 주입되기 때문입니다.
@Serivcepublic Class PayService {@ResourcePrivate CustomersIrvice Cusservice;}해결책
현재 컨텍스트가 고객 서비스 속성을 주입하기 때문에 두 개의 세관 서비스가 발생합니다. 주입 할 서비스를 해석 할 수 없습니다.
물론 어떤 사람들은 Payservice의 자원 속성을 변경하고 주입 할 사람을 지정할 것입니다. 그러나 Project-Service.jar가 타사 라이브러리 인 경우 소스 코드를 얻지 않으면 코드를 변경할 수 없습니다.
이 시점 에서이 문제는 부모 아들 컨테이너를 통해 해결할 수 있습니다.
프로젝트 서비스를 부모 컨테이너에 넣으면 모든 프로젝트 -API 콩이 하위 컨테이너에 적재됩니다.
Project-API의 컨텍스트 구성 파일이 Project-Api.xml이라고 가정하면 구현 방법은 다음과 같습니다.
1. project-total.xml 정의
<bean id = "servicecontext"> <servicecontext "> <value> classpath : project-service.xml </value-arg> </bean> </bean> <bean id ="apicontext "> <ApiconText"> <value> classPath : project-api.xml> </repuctor-arg> bean = "servicecontext"/> </constructor-arg> </bean>
2. Web.xml의 컨텍스트 구성에서 다음은 다음과 같습니다.
<CENTEXT-PARAM> <Param-Name> ContextConfigLocation </param-name> <Param- value> classPath*: project-total.xml </param-value> </context-param> <layer-class> org.springframework.web.util.log4jconfiglistener </listener> <Leater-Class> org.springframework.web.context.contextloaderListener </Learger-Class> </liareer>
ServiceContext는 모 컨테이너이고 Apicontext는 자식 컨테이너이므로 ServiceContext는 apicontext를 볼 수 없으며 Apicontext는 ServiceContext의 효과를 볼 수 있습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.