cảnh 1
Trong ứng dụng khách (ứng dụng không phải là ứng dụng web, ví dụ: có thể là ứng dụng swing)
private static ApplicationContext context = new ClassPathXmlApplicationContext("test-client.xml");
context.getBean(name);
Không cần web.xml . ApplicationContext như container để nhận dịch vụ bean. Không cần container máy chủ web. Trong test-client.xml có thể có Bean đơn giản mà không cần điều khiển từ xa, bean với điều khiển từ xa.
Kết luận : Trong kịch bản 1 applicationContext và DispatcherServlet
không liên quan.
Kịch bản 2
Trong một ứng dụng máy chủ (ứng dụng được triển khai trong máy chủ, ví dụ Tomcat). Dịch vụ được truy cập thông qua điều khiển từ xa từ chương trình máy khách (ví dụ: ứng dụng Swing)
Xác định trình nghe trong web.xml
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
Tại máy chủ khởi động, khởi ContextLoaderListener
tạo các bean được định nghĩa trong applicationContext.xml .
Giả sử bạn đã định nghĩa các mục sau trong applicationContext.xml :
<import resource="test1.xml" />
<import resource="test2.xml" />
<import resource="test3.xml" />
<import resource="test4.xml" />
Các bean được khởi tạo từ tất cả bốn tệp cấu hình test1.xml , test2.xml , test3.xml , test4.xml .
Kết luận : Trong ứng dụng Kịch bản 2 Nội dung và DispatcherServlet
không liên quan.
Kịch bản 3
Trong một ứng dụng web với MVC mùa xuân.
Trong tệp web.xml xác định:
<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>
Khi Tomcat bắt đầu, các bean được định nghĩa trong springweb-servlet.xml được khởi tạo.
DispatcherServlet
kéo dài FrameworkServlet
. TrongFrameworkServlet
khởi tạo đậu diễn ra cho springweb. Trong trường hợp của chúng tôi springweb là FrameworkServlet.
Phần kết luận : Trong kịch bản 3 ứng dụng Nội dung và DispatcherServlet
không liên quan.
Kịch bản 4
Trong ứng dụng web với MVC mùa xuân. springweb-servlet.xml cho servlet và applicationContext.xml để truy cập dịch vụ nghiệp vụ trong chương trình máy chủ hoặc để truy cập dịch vụ DB trong chương trình máy chủ khác.
Trong tệp web.xml, các mục sau được định nghĩa:
<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>
Khi khởi động máy chủ, ContextLoaderListener
khởi tạo các bean được định nghĩa trong applicationContext.xml ; giả sử bạn đã tuyên bố ở đây:
<import resource="test1.xml" />
<import resource="test2.xml" />
<import resource="test3.xml" />
<import resource="test4.xml" />
Tất cả các bean được khởi tạo từ tất cả bốn test1.xml , test2.xml , test3.xml , test4.xml . Sau khi hoàn thành khởi tạo bean được định nghĩa trong applicationContext.xml , các bean được định nghĩa trong springweb-servlet.xml được khởi tạo.
Vì vậy, thứ tự khởi tạo là: root (bối cảnh ứng dụng), sau đó là FrameworkServlet.
Bây giờ cần phải rõ ràng tại sao chúng quan trọng trong kịch bản nào.