Latar belakang cepat: Saya sedang mengerjakan pengembangan antarmuka yang akan diimplementasikan oleh saya dan pengembang lainnya. Antarmuka ini akan memungkinkan pengguna untuk "plugin" kode fungsional baru ke dalam sistem untuk penggunaan baru. Kode baru ini akan dipanggil dari server / aplikasi yang sudah berjalan. (TLDR: Saya perlu mengembangkan kemampuan plugin untuk diinstal ke dalam aplikasi saya dengan cepat)
Semua pekerjaan yang telah saya lakukan dengan antarmuka sejauh ini adalah untuk keperluan pengkodean internal, bukan untuk diekspos keluar. Satu-satunya cara saya bisa memikirkan untuk memungkinkan pengguna untuk plugin antarmuka implementasi kode baru, akan bagi pengguna untuk entah bagaimana menghubungkan file JAR dalam berisi kelas pelaksana dan entah bagaimana mendefinisikan tanda tangan kelasnya untuk panggilan. Ini sepertinya sesuatu yang telah dilakukan sebelumnya, saya hanya belum pernah terkena ke sisi pengkodean itu.
Apakah ada kerangka kerja yang bisa saya gunakan untuk memungkinkan plugin kode Java baru ini selama runtime server / aplikasi? Saya telah menggunakan API sebelumnya, tetapi di lebih banyak layanan web mengekspos rasa di mana Anda mengkonsumsi layanan dan tidak "mengimplementasikan" beberapa antarmuka inti.
Untuk referensi saya menggunakan Java backend, dengan Spring untuk aplikasi utama.
sumber
Jawaban:
Setelah melihat ke posting terkait pada Stack Overflow , saya menemukan ada berbagai alat yang berbeda yang saya inginkan untuk melakukan pengembangan gaya "plugin".
Pertama, saya dekat dengan "API" tetapi solusi yang benar adalah "SPI" atau Antarmuka Penyedia Layanan. Saya menemukan posting yang sangat bagus menggambarkan perbedaan pada Stack Overflow . Untuk meringkas: API adalah satu set kelas / antarmuka / metode yang Anda PANGGIL dan GUNAKAN untuk mencapai tujuan. Dibandingkan dengan SPI yang merupakan sekumpulan kelas / antarmuka / metode yang Anda EXTEND dan IMPLEMENT untuk mencapai tujuan.
Ada banyak cara saya masih mencari melalui untuk menemukan solusi yang tepat untuk saya, tetapi tampaknya menggunakan Java
ClassLoader
atauURLClassLoader
akan menjadi cara untuk pergi. Oracle memberikan tutorial yang bagus tentang bagaimana menerapkan ini di sini .Ada banyak alat di luar sana yang dapat memberikan dukungan untuk ini seperti Apache Aries dan OSGi .
sumber