2012-04-24 41 views
11

Tôi hơi bối rối với hai khái niệm này. Đọc tài liệu về Mùa xuân, tôi đã phát hiện ra, ví dụ: rằng các nhà máy đậu là các thùng chứa Spring. Tôi cũng đọc rằng "ApplicationContext là một superset hoàn chỉnh của BeanFactory". Nhưng sự khác biệt giữa hai không rõ ràng. Vì vậy, sự khác biệt là gì?Sự khác nhau giữa ngữ cảnh ứng dụng Spring và vùng chứa Spring là gì?

+3

Kiểm tra này http://stackoverflow.com/questions/243385/new-to-spring-beanfactory-vs-applicationcontext cho bối cảnh ứng dụng Vs nhà máy Bean – xyz

+0

hạn cũng bối rối tôi, sau khi đọc từ nhiều nguồn khác nhau tôi found- container về cơ bản là nơi đậu thực sự sống, và mùa xuân được thiết kế là cách mà bạn có thể truy cập các bean này và nhiều chức năng khác bằng cách sử dụng context.Spring có nhiều triển khai ngữ cảnh cho các mục đích tương ứng. –

Trả lời

8

câu trả lời từ this link kèm theo Ajinkya là khá toàn diện, tuy nhiên, tôi muốn refererence một số điểm tốt từ vật liệu khác - Mùa xuân trong hành động (Manning Publications):

Trong một ứng dụng Spring-based, bạn các đối tượng ứng dụng sẽ nằm trong vùng chứa Spring. Như minh họa trong hình 2.1, container sẽ tạo các đối tượng, nối chúng lại với nhau, cấu hình chúng và quản lý vòng đời hoàn chỉnh của chúng từ cái nôi đến mộ (hoặc mới để hoàn thành() như trường hợp có thể).

enter image description here

Không có vùng chứa Spring nào. Mùa xuân đi kèm với một số triển khai vùng chứa có thể được phân loại thành hai loại riêng biệt. Các nhà máy đậu (được định nghĩa bởi giao diện org.springframework.beans.factory.BeanFactory) là các thùng chứa đơn giản nhất, cung cấp hỗ trợ cơ bản cho DI. Các ngữ cảnh ứng dụng (được định nghĩa bởi giao diện org.springframework.context.ApplicationContext) xây dựng trên khái niệm về một nhà máy đậu bằng cách cung cấp các dịch vụ khung ứng dụng, chẳng hạn như khả năng giải quyết các tin nhắn văn bản từ một tệp thuộc tính và khả năng xuất bản các sự kiện ứng dụng quan tâm người nghe sự kiện.

Trên bề mặt, một ApplicationContext cũng giống như một BeanFactory. Cả hai định nghĩa đậu tải, đậu dây với nhau, và phân phối đậu theo yêu cầu. Nhưng một ApplicationContext cung cấp nhiều hơn nữa:

  • ngữ cảnh ứng dụng cung cấp phương tiện để giải quyết tin nhắn văn bản, bao gồm hỗ trợ quốc tế hóa (I18N) của những tin nhắn đó.
  • ngữ cảnh ứng dụng cung cấp cách chung để tải tài nguyên tệp, chẳng hạn như hình ảnh.
  • ngữ cảnh ứng dụng có thể xuất bản sự kiện cho đậu được đăng ký làm người nghe.

Do chức năng bổ sung mà nó cung cấp, một ApplicationContext được ưu tiên hơn BeanFactory trong gần như tất cả các ứng dụng. Những lần duy nhất bạn có thể cân nhắc sử dụng BeanFactory trong các trường hợp tài nguyên khan hiếm, chẳng hạn như thiết bị di động.

Ngoài chức năng bổ sung được cung cấp bởi ngữ cảnh ứng dụng, một khác biệt lớn giữa ngữ cảnh ứng dụng và nhà máy sản xuất đậu là cách nạp hạt đơn. Một nhà máy đậu lười tải tất cả các loại đậu, trì hoãn việc tạo hạt cho đến khi phương thức getBean() được gọi. Một bối cảnh ứng dụng là một chút thông minh hơn và tải trước tất cả các hạt đơn khi khởi động ngữ cảnh. Bằng cách tải trước các hạt đơn, bạn đảm bảo rằng chúng sẽ sẵn sàng để sử dụng khi cần — ứng dụng của bạn sẽ không phải chờ chúng được tạo.

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