2012-03-14 3 views
0

용어를 잘못 사용하면 용서해주십시오.하지만 Java 웹 개발과 Spring에 익숙하지 않습니다. 내가 틀렸다면 제 가정을 정정하십시오.2 개 이상의 서블릿과 함께 Spring DI를 사용하는 방법은 무엇입니까?

UI 용 Vaadin과 RESTful 웹 서비스 용 Spring MVC를 사용하는 웹 애플리케이션을 만들고 싶습니다. 그래서 2 개의 서블릿이 필요하다고 생각합니다. Vaadin을 서비스하기위한 것이고, 하나는 Spring MVC를 서비스하기위한 것입니다.

두 서블릿 모두에서 사용되는 일부 일반적인 dao-beans가 있으므로 @Autowired 주석을 사용하여 Spring을 사용하여 @Repository 및 @Component - 태그가 지정된 Bean을 MVC 및 Vaadin에 주입 할 수 있다고 생각했습니다. - "(App | Servlet)". (스프링스 구성 요소 스캔 기능을 통해 발견)

그러나 나는 그것을 작동시킬 수 없습니다. Spring-MVC-App - 작동합니다. 모든 @Controllers에 주석을 달았고 모든 것이 자동으로 @Autowired입니다. 만약 angel에서 난 항상

그러나 얻을 :
SCHWERWIEGEND: Servlet.service() for servlet [hello] in context with path [/pliste] threw exception [javax.servlet.ServletException: failed to acquire new instance of class net.d21.pliste.HelloWorld] with root cause 
org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [net.d21.pliste.HelloWorld] is defined: expected single bean but found 0: 

나는 나의 기본적인 질문은 방법이 다른 서블릿으로 일반 종속성을 주입하는 생각? (제 경우에는 Vaadin과 MVC이지만, 대체 가능하다고 생각합니다.)

답변

1

전형적인 봄 웹 애플리케이션은 애플리케이션 컨텍스트의 2 수준의 계층 구조가 있습니다 ContextLoaderListener에 의해로드

  • 루트 애플리케이션 컨텍스트를 기본 설정 파일은 applicationContext.xml입니다. 이 컨텍스트는 모든 서블릿, 필터 등에서 사용할 수있는 공통 빈을 포함합니다.

  • 서블릿 특정 애플리케이션 컨텍스트. 기본 설정 위치는 ${serlvet-name}-servlet.xml입니다. 이러한 컨텍스트에는 특정 서블릿에 특정한 bean이 포함됩니다.

따라서, 귀하의 경우는 applicationContext.xml에서 흔히 콩을 선언해야하고 서블릿 특정 콩 (예를 들어, 스프링 MVC에 대한 컨트롤러) 서블릿 특정 상황이다.

<component-scan>을 사용하는 경우 다른 기본 패키지를 사용하거나 filtering them by annotations을 사용하여 다른 컨텍스트에서 빈의 중복을 피할 필요가 있습니다.

+0

귀하의 의견과 espacialy 링크가 도움이되었습니다. 감사! – crushervx

관련 문제