Làm cách nào tôi có thể bổ sung các JAR mới thực hiện giao diện một cách linh hoạt?


7

Bối cảnh nhanh: Tôi đang làm việc để phát triển một giao diện sẽ được thực hiện bởi chính tôi và các nhà phát triển khác. Giao diện này sẽ cho phép người dùng "cắm" mã chức năng mới vào một hệ thống để sử dụng mới. Mã mới này sẽ được gọi từ một máy chủ / ứng dụng đã chạy. (TLDR: Tôi cần phát triển khả năng các plugin được cài đặt vào ứng dụng của mình một cách nhanh chóng)

Tất cả các công việc tôi đã làm với các giao diện cho đến nay là cho mục đích mã hóa nội bộ, không được đưa ra bên ngoài. Cách duy nhất tôi có thể nghĩ đến để cho phép người dùng bổ sung các giao diện triển khai mã mới, là người dùng bằng cách nào đó móc một tệp JAR để chứa lớp triển khai và bằng cách nào đó xác định chữ ký lớp của nó để gọi. Điều này có vẻ như một cái gì đó đã được thực hiện trước đây, tôi chỉ chưa bao giờ được tiếp xúc với mặt mã hóa của nó.

Có khung nào tôi có thể sử dụng để cho phép plugin này có mã Java mới trong thời gian chạy máy chủ / ứng dụng không? Tôi đã sử dụng API trước đây, nhưng trong phần lớn dịch vụ web cho thấy bạn đang tiêu thụ một dịch vụ và không "thực hiện" một số giao diện cốt lõi.

Để tham khảo Tôi đang sử dụng một phụ trợ Java, với Spring cho ứng dụng chính.


1
Trông giống như một bản sao của stackoverflow.com/questions/25449/
Esben Skov Pedersen

@EsbenSkovPedersen dẫn tôi vào một cái hố thỏ cuối cùng đã cho tôi mọi thứ tôi cần và sau đó là một số. Cảm ơn rât nhiều. (-admins: Bản sao, đóng là tốt đối với tôi)
Walls

@Walls trùng lặp phải trên cùng một trang web. Chỉ vì SO có một câu hỏi tương tự không có nghĩa là câu hỏi này là một bản sao của nó. Bạn có thể tóm tắt những gì bạn tìm thấy trong câu trả lời cho câu hỏi này và liên kết đến câu hỏi SO, vì câu trả lời lâu hơn một chút so với nhận xét.

Câu trả lời:


5

Sau khi xem xét một bài đăng liên quan trên Stack Overflow , tôi thấy có rất nhiều công cụ khác nhau để tôi thực hiện phát triển kiểu "plugin".

Đầu tiên, tôi đã thân với "API" nhưng giải pháp chính xác là "SPI" hoặc Giao diện nhà cung cấp dịch vụ. Tôi tìm thấy một bài viết rất hay mô tả sự khác biệt trên Stack Overflow . Tóm lại: API là một tập hợp các lớp / giao diện / phương thức mà bạn GỌI và SỬ DỤNG để đạt được mục tiêu. So với SPI là một tập hợp các lớp / giao diện / phương thức mà bạn TRAO ĐỔI và THỰC HIỆN để đạt được mục tiêu.

Có nhiều cách tôi vẫn đang tìm kiếm để tìm giải pháp phù hợp với mình, nhưng có vẻ như sử dụng Java ClassLoaderhoặc URLClassLoadersẽ là cách tốt nhất. Oracle cung cấp một hướng dẫn tuyệt vời về cách thực hiện điều này ở đây .

Có nhiều công cụ hiện có có thể cung cấp hỗ trợ cho việc này như Apache AriesOSGi .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.