Khi khách hàng nói "Mã không nên có trình nạp lớp tùy chỉnh" trong Java, điều đó có nghĩa là gì? Tôi không thể làm gì?Trình tải lớp chính xác là gì?
Trả lời
A bộ nạp lớp là một đối tượng trong Java chịu trách nhiệm tìm kiếm biểu diễn nhị phân của các lớp Java và tải chúng vào JVM. Tất cả các JVM bắt đầu với trình nạp lớp khởi động chịu trách nhiệm tải lớp ban đầu của người dùng, cùng với một số kiểu dựng sẵn như Class
và SecurityManager
, nhưng người dùng có thể cung cấp trình nạp lớp của riêng họ để tìm các lớp từ các nguồn khác. Ví dụ, một trình nạp lớp tùy chỉnh có thể tạo ra các lớp riêng của nó bằng cách soạn bytecode của riêng nó, hoặc nó có thể tìm các lớp từ một nguồn mạng.
Để tuân thủ những gì khách hàng của bạn đang yêu cầu, bạn không nên định nghĩa trình nạp lớp của riêng bạn và phải dựa vào trình nạp lớp khởi động để tìm tất cả các lớp của bạn. Điều này gần như phổ biến những gì được thực hiện trong các chương trình Java đơn giản bởi vì các ca sử dụng cho các trình nạp khởi động tùy chỉnh thường khá phức tạp và sắc thái. Bạn không cần phải lo lắng về việc hạn chế này trừ khi bạn đặc biệt muốn thay đổi cách mà JVM tìm và tải các lớp.
Trình tải lớp tùy chỉnh thường được sử dụng để tạo mã động hoặc để tăng cường các lớp hiện có.
Ví dụ một số triển khai ORM (JDO) sử dụng điều này để tạo mã xử lý việc dịch các đối tượng Java sang các bảng cơ sở dữ liệu. Sử dụng khác là trong các giải pháp phân cụm trong suốt (như Terracota), nơi các đối tượng được tăng cường để chúng tự động sao chép chính nó qua cụm.
Điều này về cơ bản ngăn bạn tạo động và chèn mã vào một ứng dụng hiện có.
Trình tải lớp là đối tượng chịu trách nhiệm tải lớp học. Bất cứ khi nào bạn khởi tạo một lớp bằng cách sử dụng new
, hệ thống runtime cố gắng tải lớp bằng cách sử dụng một hoặc nhiều phiên bản của lớp trừu tượng ClassLoader. Bạn có thể định nghĩa các trình nạp lớp tùy chỉnh để tải các lớp từ mạng, cơ sở dữ liệu, các quy trình khác hoặc bất kỳ nguồn dữ liệu có thể tưởng tượng nào.
Vì vậy, nếu khách hàng của bạn không muốn bạn sử dụng trình tải lớp tùy chỉnh thì hãy chắc chắn không bao giờ viết một lớp mở rộng ClassLoader hoặc bất kỳ dẫn xuất nào của nó. Vui lòng xem tài liệu API Java ClassLoader để biết thêm chi tiết.
Trình tải lớp tùy chỉnh sẽ cho phép bạn tải lớp học từ các nguồn không theo quy ước (từ bất kỳ đâu bạn có thể tưởng tượng, bao gồm cả hư không, tức là được tạo khi đang di chuyển). Vì khách hàng của bạn đang nói đưa ra thông điệp đó, nên các lớp học có thể được tải chỉ từ các nguồn tiêu chuẩn (ví dụ: hệ thống tệp, tệp jar, v.v.).
Vì vậy, nếu tôi chỉ gắn bó với Khung công tác Spring và không làm bất cứ điều gì ngoài bình thường, tôi sẽ ổn? –