2010-04-06 39 views
5

Tôi muốn sử dụng cả ContextLoaderListener (để tôi có thể chuyển Spring Beans tới servlet của tôi) cũng như DispatchServlet (Spring MVC). Tuy nhiên, hiện tại tôi phải chuyển init param cho cả hai trình khởi tạo lớp này:Sử dụng một ContextLoaderListener phù hợp với DispatchServlet

<param-name>contextConfigLocation</param-name> 
<param-value> 
    /WEB-INF/spring/app-config.xml 
</param-value> 

Vì vậy, tôi sử dụng cùng một xml cho cả hai lớp này. Tự hỏi nếu nó sẽ dẫn đến hạt đậu của tôi được khởi tạo hai lần? Nếu có, tôi phải làm thế nào để tránh điều đó?

Trả lời

12

Đối với cả hai ContextLoaderListenerDispatcherServlet, thông số contextConfigLocation là tùy chọn.

ContextLoaderListener mặc định là /WEB-INF/application.xml, DispatcherServlet mặc định là /WEB-INF/servletname-servlet.xml.

Nếu bạn đặt các thông số này một cách rõ ràng, bạn nên không đặt chúng thành cùng một giá trị. Các ContextLoaderListenerDispatcherServlet phải có ngữ cảnh với các nhóm định nghĩa bean khác nhau, vì nếu không, như bạn nói, các hạt sẽ được khởi tạo hai lần.

+1

Vì vậy, không có cách nào cho hai chia sẻ cùng một bộ đậu? –

+1

@Phuong: Các bean của servlet sẽ có quyền truy cập vào các bean trong ngữ cảnh được tải bởi người nghe. Các bối cảnh tạo thành một mối quan hệ cha-con. Các hạt cà phê được "sở hữu" bởi cha mẹ, nhưng có thể nhìn thấy đứa trẻ – skaffman

+0

Hmm, tôi đọc một trong các bài đăng của bạn ở đây: http://stackoverflow.com/questions/1464881/defaultannotationhandlermapping-via-contextloaderlistener-instead-of-dispatcherse, và vấn đề đã được giải thích rõ ràng hơn nhiều. Tôi sẽ cố gắng để xem liệu tôi có thể tránh sao chép đậu của tôi. Cảm ơn. –

6

để buộc DispatcherServlet khởi sử dụng bối cảnh từ ContextLoaderListener bạn nên đặt contextConfigLocation như trống:

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     classpath:spring-context.xml 
    </param-value> 
</context-param> 

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

<servlet> 
    <servlet-name>dispatcherServlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value></param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>dispatcherServlet</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 
Các vấn đề liên quan