패키지명 변경에 따른 component-scan 설정 관련
- 작성자 :
- 김*중
- 작성일 :
- 2010-10-08 18:48:30
- 조회수 :
- 3,021
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
수고가 많으십니다
component-scan 관련하여 질문을 드립니다
dispatcher-servlet.xml 파일에도 context:component-scan 태그가 있고
<context:component-scan base-package="com/pktcorp">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
</context:component-scan>
context-common.xml 파일에도 context:component-scan 태그가 있네요
<context:component-scan base-package="com/pktcorp">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
그런데 Controller를 위에서 include 시키고 아래에서 exclude 하네요
왜 이렇게 설정을 하는건가요?
제가 패키지명을 바꾸고 dispatcher-servlet.xml에만 변경을 시키니까
Service와 Repository와 관련하여 annotation으로 설정한 Service와 Repository bean들이 생성이 안되어 에러가 났고
그래서 Service와 Repository와 모두 exclude-filter에서 include-filter로 변경하니까 그런 문제는 없는데
이제는 aop와 트랜젝션이 적용이 안되어서 엄청나게 삽질을 했네요
context-common.xml 파일에서 base-package를 변경하고 dispatcher-servlet.xml 파일에도
include-filter로 변경 했었던걸 다시 exclude-filter 하니까 전부 제대로 동작을 하네요
궁금한 사항을 정리하면
1) dispatcher-servlet.xml와 context-common.xml 파일의 설정이 다른점??
2) annotation에서 Service, Repository을 exclude-filter로 설정하면 제외하란뜻 아닌가요?
그래서 annotation으로는 bean을 생성을 못하는게 맞을듯 한데
아닌가요??
이상이구요 답변 부탁드여요
component-scan 관련하여 질문을 드립니다
dispatcher-servlet.xml 파일에도 context:component-scan 태그가 있고
<context:component-scan base-package="com/pktcorp">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
</context:component-scan>
context-common.xml 파일에도 context:component-scan 태그가 있네요
<context:component-scan base-package="com/pktcorp">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
그런데 Controller를 위에서 include 시키고 아래에서 exclude 하네요
왜 이렇게 설정을 하는건가요?
제가 패키지명을 바꾸고 dispatcher-servlet.xml에만 변경을 시키니까
Service와 Repository와 관련하여 annotation으로 설정한 Service와 Repository bean들이 생성이 안되어 에러가 났고
그래서 Service와 Repository와 모두 exclude-filter에서 include-filter로 변경하니까 그런 문제는 없는데
이제는 aop와 트랜젝션이 적용이 안되어서 엄청나게 삽질을 했네요
context-common.xml 파일에서 base-package를 변경하고 dispatcher-servlet.xml 파일에도
include-filter로 변경 했었던걸 다시 exclude-filter 하니까 전부 제대로 동작을 하네요
궁금한 사항을 정리하면
1) dispatcher-servlet.xml와 context-common.xml 파일의 설정이 다른점??
2) annotation에서 Service, Repository을 exclude-filter로 설정하면 제외하란뜻 아닌가요?
그래서 annotation으로는 bean을 생성을 못하는게 맞을듯 한데
아닌가요??
이상이구요 답변 부탁드여요
A
안녕하세요.. 김대중님..
우선 다음 가이드의 아래 부분 DispatcherServlet 설정 부분(마지막 이미지 등)을 참조하십시오.
http://www.egovframe.org/wiki/doku.php?id=egovframework:rte:ptl:dispatcherservlet
정리하자면 Business Layer와 Persistence Layer 부분은 ContextLoaderLister에 등록(스캔)하고.. Presentation Layer는 DispatcherServlet에 등록(스캔)하도록 가이드 되고 있습니다.
이유는 화면처리부분이 가이드의 이미지와 같이 여러 개 있을 수 있고.. 상위 @Service, @Repository를 공유할 수 있도록 하기 위해서입니다.
실제 계층 구조를 가지고 있기 때문에 하위에서는 상위 Bean들을 참조할 수 있습니다. (반대는 불가능)
따라서.. ContextLoaderLister에는 @Service, @Repository만 include시키고..
하위 DispatcherServlet에는 @Controller만 include시키는 방식입니다.
그럼.. 즐거운 하루되십시오.
감사합니다.
우선 다음 가이드의 아래 부분 DispatcherServlet 설정 부분(마지막 이미지 등)을 참조하십시오.
http://www.egovframe.org/wiki/doku.php?id=egovframework:rte:ptl:dispatcherservlet
정리하자면 Business Layer와 Persistence Layer 부분은 ContextLoaderLister에 등록(스캔)하고.. Presentation Layer는 DispatcherServlet에 등록(스캔)하도록 가이드 되고 있습니다.
이유는 화면처리부분이 가이드의 이미지와 같이 여러 개 있을 수 있고.. 상위 @Service, @Repository를 공유할 수 있도록 하기 위해서입니다.
실제 계층 구조를 가지고 있기 때문에 하위에서는 상위 Bean들을 참조할 수 있습니다. (반대는 불가능)
따라서.. ContextLoaderLister에는 @Service, @Repository만 include시키고..
하위 DispatcherServlet에는 @Controller만 include시키는 방식입니다.
그럼.. 즐거운 하루되십시오.
감사합니다.