Cách tốt nhất để hiểu cách một container IoC phức tạp đến từ việc phân tích nó như thế nào.
Trong một trải nghiệm cụ thể, khi tôi đã dành toàn bộ buổi chiều, hãy gỡ lỗi mã 'Hello World' đơn giản bằng cách sử dụng plexus, Maven được dựa trên (and here is a helpful link to browse its source code).Nó kinda đã đưa ra (bằng cách nhìn vào defaultPlexusContainer) như:
- Classpath Cấu hình (thông qua classworlds)
- Tạo một Variable Runtime Bối cảnh (về cơ bản một bản đồ), để tính cửa hàng và các biến
- Cấu hình phân tích cú pháp (khám phá các module siêu dữ liệu vào classpath, vv)
- khởi:
- Firing ComponentDiscoverers thêm
- Firing của ComponentDiscovererListeners thêm
Đây lá một khía cạnh quan trọng, sâu vào các bước trên: Nhìn lên một thành phần. Trong plexus, khái niệm Phase kết thúc các bước để xây dựng một Object, và các Phase đó thường gắn với một khái niệm Personality. Tuy nhiên, cho default setting, điều này được thực hiện bằng cách thực hiện các giai đoạn sau đây:
- Object õ (ví dụ, new Object())
- Log Việc kích hoạt (ví dụ, thiết lập một logger cho đối tượng)
- Thành phần : tức, tra cứu phụ thuộc và thiết
- chiến lược setter là một điểm thú vị, nhưng tôi sẽ để lại các chi tiết cho bây giờ
- Th e đi qua các bối cảnh vào đối tượng tạo
- Đối tượng thêm khởi động thủ tục
Hầu hết các bước này là không bắt buộc, và thường liên quan đến việc xác định một giao diện nhất định và gọi đó là trên đối tượng mục tiêu - điều này là mặc định cho cá tính plexus, lưu ý rằng.
Ngoài ra, mỗi đối tượng có thể bị ràng buộc với một người quản lý vòng đời, mà chủ yếu là tạo sự khác biệt giữa một đối tượng mới và một singleton.
Trong bản ghi cụ thể của tôi: Phần khó nhất là phân tích cú pháp cấu hình và khởi động vùng chứa. Sau đó, bạn có thể nhận thấy không có sự khác biệt về hiệu suất.
Sau khi áp dụng IoC, hy vọng hệ thống của bạn sẽ không còn được kết hợp chặt chẽ nữa. ;) Tôi khuyên bạn nên thử nó trên một phần của hệ thống của bạn và (hiệu suất iff là quan trọng) điểm chuẩn. Tôi nghi ngờ rằng sẽ có một sự khác biệt đáng kể. Hầu hết các tắc nghẽn liên quan đến tài nguyên bên ngoài. – TrueWill
Tôi đã sử dụng IoC - tôi đã tự hỏi liệu có ai có thông tin về điều này không. Không có điểm refactoring ứng dụng của tôi cho khớp nối chặt chẽ chỉ để chuẩn mực này nếu ai đó đã cố gắng một cái gì đó tương tự! – UpTheCreek
nếu bạn muốn IoC nhanh nhất trên thị trường, hãy kiểm tra code.google.com/p/yadic được viết bằng F # cho .Net và scala cho java. Nó nhanh gấp 3 lần so với Autofac lambda – Xian