Bối cảnh gốc và con Trước khi đọc thêm, xin vui lòng hiểu rằng -
Mùa xuân có thể có nhiều bối cảnh cùng một lúc. Một trong số đó sẽ là bối cảnh gốc, và tất cả các bối cảnh khác sẽ là bối cảnh con.
Tất cả các bối cảnh con có thể truy cập vào các bean được xác định trong bối cảnh gốc; nhưng ngược lại là không đúng sự thật. Bối cảnh gốc không thể truy cập bối cảnh con đậu.
Ứng dụng Nội dung:
applicationContext.xml là cấu hình bối cảnh gốc cho mọi ứng dụng web. Spring tải tệp applicationContext.xml và tạo ApplicationContext cho toàn bộ ứng dụng. Sẽ chỉ có một bối cảnh ứng dụng cho mỗi ứng dụng web. Nếu bạn không khai báo rõ ràng tên tệp cấu hình ngữ cảnh trong web.xml bằng cách sử dụng paramConfigLocation, Spring sẽ tìm kiếm applicationContext.xml trong thư mục WEB-INF và ném FileNotFoundException nếu nó không thể tìm thấy tệp này.
ContextLoaderListener Thực hiện công việc khởi tạo thực tế cho bối cảnh ứng dụng gốc. Đọc một bối cảnh củaConConigigLocation, bối cảnh-param và chuyển giá trị của nó cho thể hiện bối cảnh, phân tích nó thành nhiều đường dẫn tệp có thể được phân tách bằng bất kỳ số dấu phẩy và khoảng trắng nào, ví dụ: WEB WEB-INF / applicationContext1.xml, WEB-INF / applicationContext2.xml. ContextLoaderListener là tùy chọn. Chỉ cần đưa ra một điểm ở đây: bạn có thể khởi động một ứng dụng Spring mà không cần cấu hình ContextLoaderListener, chỉ là một tệp web.xml tối thiểu cơ bản với DispatcherServlet.
DispatcherServlet DispatcherServlet về cơ bản là một Servlet (nó mở rộng httpServlet) với mục đích chính là xử lý các yêu cầu web đến phù hợp với mẫu URL được định cấu hình. Nó nhận một URI đến và tìm sự kết hợp đúng của bộ điều khiển và khung nhìn. Vì vậy, nó là bộ điều khiển phía trước.
Khi bạn xác định một DispatcherServlet trong cấu hình mùa xuân, bạn cung cấp một tệp XML với các mục của các lớp trình điều khiển, xem ánh xạ, v.v. bằng cách sử dụng thuộc tính contextConfigLocation.
WebApplicationContext Ngoài ApplicationContext, có thể có nhiều WebApplicationContext trong một ứng dụng web. Nói một cách đơn giản, mỗi DispatcherServlet được liên kết với một WebApplicationContext. Tệp xxx-servlet.xml dành riêng cho DispatcherServlet và một ứng dụng web có thể có nhiều hơn một DispatcherServlet được cấu hình để xử lý các yêu cầu. Trong các trường hợp như vậy, mỗi DispatcherServlet sẽ có một xxx-servlet.xml riêng được định cấu hình. Nhưng, applicationContext.xml sẽ phổ biến cho tất cả các tệp cấu hình servlet. Theo mặc định, Spring sẽ tải tệp có tên là xxx xxx-servlet.xml. Từ thư mục WEB-INF của ứng dụng web trong đó xxx là tên servlet trong web.xml. Nếu bạn muốn thay đổi tên của tên tệp đó hoặc thay đổi vị trí, hãy thêm init-param với bối cảnhConfigLocation làm tên param.
So sánh và mối quan hệ giữa chúng:
ContextLoaderListener vs DispatcherServlet
ContextLoaderListener tạo bối cảnh ứng dụng gốc. Các mục nhập của DispatcherServlet tạo một bối cảnh ứng dụng con cho mỗi mục nhập servlet. Bối cảnh con có thể truy cập các đậu được xác định trong bối cảnh gốc. Đậu trong bối cảnh gốc không thể truy cập đậu trong bối cảnh trẻ em (trực tiếp). Tất cả các bối cảnh được thêm vào ServletContext. Bạn có thể truy cập ngữ cảnh gốc bằng lớp WebApplicationContextUtils.
Sau khi đọc tài liệu về Spring, sau đây là cách hiểu:
a) Các bối cảnh ứng dụng được phân cấp và WebApplicationContexts cũng vậy. Tham khảo tài liệu tại đây.
b) ContextLoaderListener tạo bối cảnh ứng dụng web gốc cho ứng dụng web và đặt nó vào ServletContext. Bối cảnh này có thể được sử dụng để tải và dỡ các bean được quản lý mùa xuân tương ứng với những gì công nghệ đang được sử dụng trong lớp điều khiển (Struts hoặc Spring MVC).
c) DispatcherServlet tạo WebApplicationContext của riêng mình và trình xử lý / bộ điều khiển / trình phân giải khung nhìn được quản lý theo ngữ cảnh này.
d) Khi ContextLoaderListener được sử dụng song song với DispatcherServlet, bối cảnh ứng dụng web gốc được tạo trước tiên như đã nói trước đó và bối cảnh con cũng được tạo bởi DispatcherSerlvet và được gắn vào bối cảnh ứng dụng gốc. Tham khảo tài liệu tại đây.
Khi chúng tôi đang làm việc với Spring MVC và cũng đang sử dụng Spring trong lớp dịch vụ, chúng tôi cung cấp hai bối cảnh ứng dụng. Cái đầu tiên được cấu hình bằng ContextLoaderListener và cái còn lại với DispatcherServlet
Nói chung, bạn sẽ xác định tất cả các bean liên quan đến MVC (bộ điều khiển và khung nhìn, v.v.) trong ngữ cảnh của DispatcherServlet và tất cả các bean cắt chéo như bảo mật, giao dịch, dịch vụ, v.v. trong bối cảnh gốc của ContextLoaderListener.
Tham khảo điều này để biết thêm chi tiết:
https://siddharthnawani.blogspot.com/2019/10/contextloaderlistener-vs.html