2010-07-06 4 views
2

이것은 비교적 정확하게 찾고 있지 않은 비교적 간단한 질문 일 수 있지만 Spring IoC 컨테이너를 사용하여 서블릿을 구성하려고합니다. 나는 개인 데이터 멤버 인 추가 핸들러를 가지고 있으며 런타임에 구성하고자한다. 이것을 할 수 있습니까?web.xml에 정의 된 서블릿과 함께 Spring IoC를 사용하십시오.

지금 당장 나는 서블릿을 올바르게로드하는 web.xml을 가지고 있습니다. 그러나 문제는 Spring IoC 컨테이너에 인스턴스를 연결하는 방법을 모르거나 IoC 컨테이너에서 생성 된 인스턴스를 서블릿 컨테이너. 내 web.xml 파일에서

, 나는 ContextLoaderListener

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

을 설정하고 또한 콩 컨텍스트에 대한 올바른 위치를 구성하고있어

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
    /WEB-INF/beans.xml 
    </param-value> 
</context-param> 

나는 또한 beans.xml 파일이 있음을 알고 내가 잘못 입력 한 경우 몇 가지 예외가 있기 때문에 구문 분석되고 있습니다.

생각하십니까? 이 작업을 수행하는 더 좋은 방법이 있습니까?

답변

2

대부분의 사람들은 Spring MVC 프레임 워크를 사용하고 있다고 생각합니다. 이 경우, is는 Spring 클래스이며 실제 서블릿 대신 "Controllers"를 구현하기 만하면된다.

그렇다면 정확하게 원하는 것을 정확하게 수행 할 수 있습니다. FrameworkServlet (확장 가능) 또는 DelegatingFilterPorxy (이 클래스를 예로 사용하여 'DelegatingSevletProxy'를 작성할 수 있음)을 확인하십시오.

+0

감사합니다. 나는 처음부터 SpringMVC 사용에 대해 생각하고 있었고, 나 자신의 게으름이 그것을 막았다. 이번에는 바로 진행하겠습니다. ;-) –

0

로직을 서블릿 밖으로 옮겨서 Spring 애플 리케이션 컨텍스트에 대한 참조를 얻고, 컨텍스트에서 bean을 인스턴스화하고, HTTP 요청, 세션 및 기타 필요한 것들을 전달하는 씬 래퍼가되어야한다. 콩에게 일을 시키라고 말한다.

서블릿 컨테이너 외부에서 서블릿을 인스턴스화 할 수 없으므로 단위 테스트를받을 수 없다고 생각하십시오. IoC 컨테이너는 인스턴스화 할 수 없습니다. IoC 나 DI는 이익을 얻지 못할 것입니다.

가능한 경우 Spring MVC를 사용하십시오. 아마도 서블릿의 로직을 컨트롤러 클래스로 옮기고 싶을 것이다.

그렇지 않으면 org.springframework.web.context.ContextLoaderListener를 살펴보십시오. 거기에서 스프링이 어떻게 스스로를 부트 스트랩하는지 볼 수 있습니다.

+0

Drew의 조언은 아래처럼 잘 보입니다. FrameworkServlet과 DelegatingFilterProxy에 대한 그의 지적은 내가 언급 한 코드를 읽는 것보다 더 나은 조언 일 것입니다. – Ladlestein

관련 문제