Aplikasi web pegas standar (dibuat oleh Roo atau Template "Proyek MVC Musim Semi") membuat web.xml dengan ContextLoaderListener
dan DispatcherServlet
. Mengapa mereka tidak hanya menggunakan DispatcherServlet
dan membuatnya untuk memuat konfigurasi lengkap?
Saya memahami bahwa ContextLoaderListener harus digunakan untuk memuat hal-hal yang tidak relevan dengan web dan DispatcherServlet digunakan untuk memuat hal-hal yang relevan dengan web (Pengontrol, ...). Dan ini menghasilkan dua konteks: konteks orang tua dan anak.
Latar Belakang:
Saya melakukannya dengan cara standar ini selama beberapa tahun.
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:META-INF/spring/applicationContext*.xml</param-value>
</context-param>
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Handles Spring requests -->
<servlet>
<servlet-name>roo</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/spring/webmvc-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
Hal ini seringkali menimbulkan masalah pada kedua konteks dan ketergantungan di antara keduanya. Di masa lalu saya selalu dapat menemukan solusi, dan saya memiliki perasaan kuat bahwa ini membuat struktur / arsitektur perangkat lunak selalu lebih baik. Tapi sekarang saya menghadapi masalah dengan kejadian dari kedua konteks tersebut .
- Namun ini membuat saya memikirkan ulang dua pola konteks ini, dan saya bertanya pada diri sendiri: mengapa saya harus membawa diri saya ke dalam masalah ini, mengapa tidak memuat semua file konfigurasi pegas dengan satu DispatcherServlet
dan menghapus ContextLoaderListener
sepenuhnya. (Saya masih akan memiliki file konfigurasi yang berbeda, tetapi hanya satu konteks.)
Apakah ada alasan untuk tidak menghapus ContextLoaderListener
?