2011-05-06 2 views
2

Eclipse에서 "Dynamic Web Project"및 Eclipse에서 해당 프로젝트를 사용하도록 Tomcat 서버를 구성했습니다. 나는 서블릿에 매핑 된 파일 확장자를 가지고 있고, 서블릿 설정에서이 같은 구성 요소 스캔 요소의 설정이 : 내 웹 서버가 시작되면 웹 프로젝트에서 구성 요소 스캔 사용

<context:component-scan base-package="com.mycompany.web" /> 

, 나는 로그에이 오류 메시지가 표시

을 :

May 6, 2011 9:50:23 AM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Allocate exception for servlet cap 
java.lang.IllegalArgumentException: Resource path [C:\...\src\main\webapp\WEB-INF\classes\com\mycompany\web] does not denote a directory 

해당 디렉토리가 없습니다 (패키지 된 .war 파일 제외). 그러나 com.mycompany.web 패키지는 존재합니다.

구성 요소 스캔을 수행하는 다른 방법이 있습니까? 그것은 다른 폴더에서 보거나, 어떻게 든 내 프로젝트 또는 뭔가에서 찾을 필요가 ...

답변

1

이런 식으로 구성 요소 스캔을 수행 할 수없는 것으로 보입니다. 그것은 클래스 파일이 Spring이 예상하는 곳에 물리적으로 위치하지 않을 때 불가능하다고 생각하는 디렉토리 목록을 작성합니다. 난 그냥 구성 요소 스캔을 사용하여,이 같은 봄 설정에서 컨트롤러를 나열하지 않음으로써이 문제를 해결 :

<context:annotation-config /> 
<bean class="com.mycompany.web.MyController"/> 

주석을 컨트롤러에 여전히 작동하기 때문에 컨트롤러를 나열 수동으로 만 추가 단계입니다.

1

원하는대로 할 수는 있지만 약간의 추가 구성이 필요합니다.

클래스를 @Controller 또는 @Repository 또는 다른 Spring 스테레오 타입 주석으로 주석을 달 수 있으며 Spring이 자동으로 선택합니다.

또는 context:component-scan에게 조금 더 자세한 정보를 제공 할 수 있습니다. 당신은 AspectJ를에게, 컨텍스트를 사용하여 마음에 들지 않는 경우

<context:component-scan base-package="com.mycompany.web"> 
    <!-- scan all classes in the com.mycompany.web package (but 
     not in subpackages) --> 
    <context:include-filter type="aspectj" expression="com.mycompany.web.*"/> 


    <!-- or if you want to include subpackages this config scans all 
     classes in com.mycompany.web.special and in its subpackages 
     (that's what the ..* means) --> 
    <context:include-filter type="aspectj" expression="com.mycompany.web.special..*"/> 
</context:component-scan> 

마지막으로, : : 예는 다음과 필터의 type 정규 표현식, 사용자 정의 주석 등 추가 정보를 원하시면 this link를 참조 할 수있다.