สถานการณ์ 1
ในแอปพลิเคชันไคลเอนต์ (แอปพลิเคชันไม่ใช่เว็บแอปพลิเคชันเช่นอาจเป็นแอปพลิเคชันแบบแกว่ง)
private static ApplicationContext context = new ClassPathXmlApplicationContext("test-client.xml");
context.getBean(name);
ไม่จำเป็นต้องweb.xml ApplicationContext เป็นคอนเทนเนอร์สำหรับรับบริการ bean ไม่จำเป็นต้องมีเว็บเซิร์ฟเวอร์คอนเทนเนอร์ ในtest-client.xmlสามารถมี Simple bean โดยไม่มี remoting, bean พร้อม remoting
สรุป : ในสถานการณ์สมมติ 1 applicationContext และDispatcherServlet
ไม่เกี่ยวข้อง
สถานการณ์ที่ 2
ในแอปพลิเคชันเซิร์ฟเวอร์ (แอปพลิเคชันที่ปรับใช้ในเซิร์ฟเวอร์เช่น Tomcat) เข้าถึงบริการผ่าน remoting จากโปรแกรมไคลเอนต์ (เช่น Swing app)
กำหนดฟังในweb.xml
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
ที่เซิร์ฟเวอร์เริ่มต้นContextLoaderListener
instantiates ถั่วที่กำหนดไว้ในapplicationContext.xml
สมมติว่าคุณได้กำหนดสิ่งต่อไปนี้ในapplicationContext.xml :
<import resource="test1.xml" />
<import resource="test2.xml" />
<import resource="test3.xml" />
<import resource="test4.xml" />
ถั่ว instantiated จากทั้งสี่แฟ้มการกำหนดค่าtest1.xml , test2.xml , test3.xml , test4.xml
สรุป : ในสถานการณ์สมมติ 2 applicationContext และDispatcherServlet
ไม่เกี่ยวข้อง
สถานการณ์ 3
ในเว็บแอปพลิเคชันที่มีสปริง MVC
ในweb.xmlกำหนด:
<servlet>
<servlet-name>springweb</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>springweb</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
เมื่อ Tomcat เริ่มทำงาน bean ที่กำหนดในspringweb-servlet.xmlจะถูกสร้างอินสแตนซ์
ขยายDispatcherServlet
FrameworkServlet
ในการFrameworkServlet
สร้างอินสแตนซ์ของถั่วจะเกิดขึ้นสำหรับสปริงเว็บ ในกรณีของเราสปริงเว็บคือ FrameworkServlet
สรุป : ในสถานการณ์สมมติ 3 applicationContext และDispatcherServlet
ไม่เกี่ยวข้อง
สถานการณ์ 4
ในเว็บแอปพลิเคชันด้วย spring MVC springweb-servlet.xmlสำหรับ servlet และapplicationContext.xmlสำหรับการเข้าถึงบริการธุรกิจภายในโปรแกรมเซิร์ฟเวอร์หรือสำหรับการเข้าถึงบริการ DB ในโปรแกรมเซิร์ฟเวอร์อื่น
ในweb.xmlมีการกำหนดดังต่อไปนี้:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>springweb</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>springweb</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
เมื่อเริ่มต้นเซิร์ฟเวอร์ContextLoaderListener
instantiates ถั่วที่กำหนดไว้ในapplicationContext.xml ; สมมติว่าคุณได้ประกาศในที่นี้:
<import resource="test1.xml" />
<import resource="test2.xml" />
<import resource="test3.xml" />
<import resource="test4.xml" />
ถั่วได้รับอินสแตนซ์ทั้งหมดจากtest1.xmlทั้งสี่, test2.xml , test3.xml , test4.xml ทั้งสี่ หลังจากการสร้างอินสแตนซ์ของ bean ที่กำหนดในapplicationContext.xmlเสร็จสมบูรณ์ bean ที่กำหนดในspringweb-servlet.xmlจะถูกสร้างอินสแตนซ์
ดังนั้นอินสแตนซ์ของคำสั่งคือ: รูท (บริบทของแอ็พพลิเคชัน), จากนั้น FrameworkServlet
ตอนนี้มันควรจะชัดเจนว่าทำไมพวกเขาถึงมีความสำคัญในสถานการณ์