2016-03-03 16 views

Trả lời

8

Có thể có cách giải thích khác nhau, nhưng đây là cách tôi nhìn thấy nó:

  • Xuân An bối cảnh, trong ý nghĩa của SecurityContext lớp, giữ xác thực, tên người dùng, cơ quan chức năng (vai trò) và có thể thông tin khác về người dùng hiện tại. Tuổi thọ của ngữ cảnh như vậy là yêu cầu hiện tại hoặc ngữ cảnh bảo mật được duy trì giữa các yêu cầu sử dụng phiên.

  • Ngữ cảnh mùa xuân, theo ý nghĩa của ApplicationContext lớp, là điểm trung tâm của ứng dụng Spring đang chạy. Mục đích chính của nó là để chứa các ứng dụng đơn đậu, nhưng nó có nhiều tính năng tiện lợi khác (một số đề cập trong câu trả lời khác). Một ứng dụng có thể có một số ApplicationContexts, nhưng trường hợp phổ biến nhất và đơn giản nhất, nó chỉ có một. Các ứng dụng web thường sử dụng phần mở rộng WebApplicationContext ", tích hợp nó với ngữ cảnh Servlet.

  • Ngữ cảnh Servlet, ý nghĩa của lớp ServletContext, là ngữ cảnh ứng dụng toàn bộ ứng dụng web Servlet có. Luôn có chính xác một đối tượng webapp trong một thùng chứa servlet như Tomcat. Nó không phải là một phần của mùa xuân. Bạn hiếm khi sử dụng nó trực tiếp khi sử dụng Spring. Nhưng nó có trong nền.

"Ngữ cảnh" là một thuật ngữ chung chung, vì vậy cũng có thể có các ngữ cảnh khác trong môi trường của bạn.

5

Có rất nhiều "bối cảnh" và cách thức chúng được nạp phụ thuộc vào cách bạn khởi tạo ứng dụng của bạn. Nhưng thông thường hầu hết các ứng dụng đều có một ngữ cảnh duy nhất chứa tất cả các bean và các thành phần mà ứng dụng của bạn yêu cầu.

Ví dụ: nếu bạn tải ứng dụng bằng Servlet, bạn có thể tải toàn bộ bằng "ngữ cảnh gốc" cũng tải ngữ cảnh Servlet là con của nó.

Cấu trúc phân cấp giống như sau "root" context ->any other context. Nó đơn giản mà.

Một mô tả here in the Spring DocsApplicationContext cung cấp:

  • Bean phương pháp nhà máy để truy cập vào các thành phần ứng dụng. (Trò chuyện ưa thích về những thứ bạn cần trong đơn của mình mà không cần sử dụng new() được gọi là dependency injection)
  • Khả năng tải tài nguyên tệp theo cách chung chung. (Cấu hình bên ngoài với propertiesprofiles)
  • Khả năng xuất bản sự kiện cho người nghe đã đăng ký. (Nói chuyện ưa thích cho "khi một số điều xảy ra làm điều gì đó", hãy đọc về số observer pattern)
  • Khả năng giải quyết thư để hỗ trợ quốc tế hóa. (Các tệp có tất cả các Chuỗi được sử dụng trong ứng dụng của bạn để chúng có thể được hiển thị bằng các ngôn ngữ khác nhau, đọc về MessageSource)
  • Thừa kế từ ngữ cảnh gốc. (Như tôi đã nói trước đây, ứng dụng của bạn cần "ngữ cảnh" và đây là nơi bắt đầu.)

Vì bạn đang sử dụng Khởi động mùa xuân, chỉ có một ngữ cảnh theo mặc định: ApplicationContext. Điều này sẽ chứa tất cả những thứ của bạn (Đậu) và các thành phần bạn cần.

Infact đó là vẻ đẹp của việc sử dụng khởi động mùa xuân, cấu hình tối thiểu và cấu hình đơn giản. Nếu bạn cảm thấy cần nhiều bối cảnh, tôi khuyên bạn nên sử dụng Profiles để thay thế.

Cuối cùng "Ngữ cảnh" được tạo ra và được xác định bởi Ứng dụng của bạn, hãy nghĩ nó là cấu hình (có thể là XML hoặc Java) để xác định Ứng dụng của bạn. những gì "trong đó" và những gì "nó cần" để làm việc.

Nếu bạn muốn thử và hiểu thêm, tôi sẽ khuyên bạn nên đọc ngay từ đầu và bắt đầu với số Introduction to Spring.

+0

theo đúng ứng dụng mùa xuân dựa trên web cũng chạy trên đầu trang của servlet phải không? Vì vậy, nếu tôi nói "root" context -> "servlet" context -> "spring" context nó có đúng không? – Harshana

+0

Ngữ cảnh gốc là "bối cảnh cơ sở" để bối cảnh Servlet kế thừa từ ngữ cảnh gốc, vì nó là con. Hãy nghĩ về nó như thế này ... bạn làm cho bối cảnh gốc với mọi thứ mà ứng dụng cần (dịch vụ, vv), nhưng ngữ cảnh servlet chỉ instantiates "những thứ" nó cần phải là servlet. Hãy nhớ rằng, bạn có thể có nhiều servlet cho mỗi vùng chứa và tất cả chúng có thể chia sẻ "ngữ cảnh ứng dụng gốc", đây là chìa khóa để hiểu cách tất cả điều này phù hợp với nhau. – dkanejs

+0

ok cảm ơn. khi nói đến servlet và bối cảnh mùa xuân, nếu tôi nói bối cảnh servlet là cha mẹ của bối cảnh mùa xuân hoặc là mối quan hệ anh chị em? Ngoài ra mùa xuân có thể truy cập vào bối cảnh servlet nhưng không phải ngược lại? Đúng không? – Harshana

3

Về mặt thiết kế hệ thống, bất kỳ Ngữ cảnh nào cũng là tập hợp các chức năng và dữ liệu phổ biến được xác định ở một nơi, nhưng phải được sử dụng từ bất kỳ đâu trong chương trình. Và mục đích chính của Bối cảnh - giảm số lượng phụ thuộc giữa các thành phần của ứng dụng. Một mục đích khác của Ngữ cảnh - giúp đơn giản hóa quyền truy cập vào chức năng và dữ liệu phổ biến. Cho phép xem xét ngữ cảnh mà bạn đã liệt kê trong câu hỏi của mình.

ServletContext

ServletContext là một phần của Servlet technology. Nhiều khung công tác dựa trên công nghệ này (JSF, Spring, Struts và nhiều hơn nữa). ServletContext chứa chức năng giao tiếp với vùng chứa Servlet của nó (như Tomcat, Glassfish vv). Những điều cơ bản mà ServletContext cung cấp:

  • nhận đơn đăng ký Tham số ban đầu;
  • nhận thông tin về việc gửi yêu cầu;
  • thêm hoặc xóa Servlets, Bộ lọc và Trình nghe;
  • lấy hoặc đặt thuộc tính của vùng chứa;
  • thông báo thời gian chạy nhật ký;
  • nhận được thêm thông tin như con đường ứng dụng, phiên bản container, vv

Như bạn thấy chỉ có chức năng cơ bản, có thể hữu ích bất cứ nơi nào trong ứng dụng, nếu bạn sẽ làm việc với công nghệ Servlet (ví dụ, phát triển khác một mvc-framework dựa trên nó).

ApplicationContext

ApplicationContext là giao diện chính của ứng dụng Spring framework. Nó có rất nhiều triển khai. Một trong số họ tải cấu hình từ tệp xml (ClassPathXmlApplicationContext), một cấu hình khác tải cấu hình dựa trên chú thích (AnnotationConfigApplicationContext) và cứ tiếp tục như vậy.Những điều cơ bản mà ApplicationContext cung cấp:

  • nhà máy đậu, khả năng tạo hạt mới dựa trên định nghĩa bean;
  • tải tài nguyên từ các nguồn khác nhau (hệ thống tệp, tệp jar, url v.v.);
  • khả năng xuất bản và nghe sự kiện;
  • giải quyết thư từ các gói thư;

Một lần nữa, được khởi tạo khi bắt đầu, chức năng cơ bản này có thể hữu ích ở hầu hết mọi nơi trong ứng dụng của bạn. Đó là lý do tại sao nó được thu thập theo ngữ cảnh. Nhiều lớp được sử dụng trong nền, để cung cấp khả năng này, nhưng tất cả những gì bạn phải biết, để sử dụng chức năng này - chỉ cần ApplicationContext.

SecurityContext

SecurityContext cung cấp quyền truy cập vào dữ liệu xác thực. Bạn có thể lấy tên của người dùng, vai trò và các chi tiết khác được xác thực. Thông tin này được mô-đun bảo mật khởi tạo, có thể cần thiết ở nhiều nơi. Сomponents, sử dụng thông tin này không biết gì về các lớp học của mô-đun bảo mật. Họ chỉ nhận được tất cả thông tin cần thiết từ SecurityContext.

Các vấn đề liên quan