Rumah  >  Artikel  >  Java  >  Mengapa saya mencipta alternatif spring mini yang ringan dan bagaimana saya melakukannya

Mengapa saya mencipta alternatif spring mini yang ringan dan bagaimana saya melakukannya

WBOY
WBOYasal
2024-08-14 10:33:20597semak imbas

Dalam artikel kecil ini saya akan cuba menerangkan mengapa saya mencipta perpustakaan ini? dan bagaimana ia dilaksanakan ?

mengapa saya mencipta perpustakaan ini?

Saya bekerja dengan rangka kerja Java EE pada banyak projek dan dalam kebanyakannya tiada had pada sumber yang tersedia untuk menjalankan aplikasi tetapi dalam beberapa kes yang jarang berlaku, kami mempunyai sumber yang terhad terutamanya memori untuk menggunakan aplikasi pada perkhidmatan penggunaan , jadi apabila aplikasi melebihi had perkhidmatan penggunaan akan melambatkan aplikasi pada mulanya kemudian jika ia meneruskan perkhidmatan akan menutupnya. Kami menggunakan rangka kerja spring warisan tanpa but spring, kami cuba menggunakan perpustakaan yang berbeza tetapi perbezaannya adalah minimum dan tidak bernilai, dan di sinilah idea, untuk mencipta alternatif spring ringan yang memfokuskan pada mengurangkan penggunaan memori sebanyak mungkin, bermula. .

hanya ada dua matlamat dalam fikiran saya semasa saya mula mereka bentuk perpustakaan :
1 - mengurangkan penggunaan Memori sebanyak mungkin
2 - cuba gunakan API Java EE sedia ada sebanyak mungkin untuk memudahkan peralihan ke perpustakaan dari sudut pembelajaran dan dari kerumitan peralihan itu sendiri.
dan dengan 2 matlamat ini saya berjaya mengurangkan jejak memori salah satu aplikasi saya sekitar 40% dan membuat peralihan mudah dan cepat kerana ia serupa dengan penyelesaian sedia ada.

Bagaimana saya mencipta perpustakaan ini?

Inilah repositori GitHub supaya anda boleh menyemak kod semasa membaca.

Perpustakaan secara keseluruhan mempunyai banyak bahagian (tangkapan skrin di bawah), kebanyakan pelaksanaan dalam modul utama yang juga dibahagikan kepada tiga jenis modul bebas : Teras, JPA, Web. Modul Apl terutamanya untuk penyepaduan, modul Pemalam ialah pemalam maven untuk membantu mencipta fail yang diperlukan di dalam arkib pakej untuk perpustakaan berfungsi dengan baik

Why i created a lightweight mini spring alternative and how I did it

Modul Teras

Jadi kita akan mulakan dengan modul teras yang seperti namanya mengandungi fungsi teras perpustakaan iaitu suntikan kebergantungan atau penyongsangan kawalan.
Untuk mencapai kefungsian ini, mula-mula ia bermula dengan mengimbas laluan kelas aplikasi semasa fasa penyusunan untuk semua kelas beranotasi yang harus diuruskan oleh perpustakaan untuk mencipta definisi komponen untuk kelas beranotasi.

Why i created a lightweight mini spring alternative and how I did it

Why i created a lightweight mini spring alternative and how I did it

Takrifan komponen pada asasnya mengandungi semua maklumat yang kita perlukan untuk membuat instantiate objek dari kelas ini kemudian, seperti maklumat pembina, jika terdapat beberapa penetap dengan anotasi suntikan (hanya suntikan pembina dan penetap disokong) jika kelas mempunyai beberapa antara muka atau melanjutkan beberapa kelas lain, kami akan mempunyai semua maklumat yang kami perlukan untuk mencipta objek daripada kelas ini (tangkapan skrin di bawah).
Dan kemudian, selepas kami mengimbas semua anotasi laluan kelas dan kami mencipta semua definisi komponen yang kami perlukan, kami akan menyimpannya dalam laluan kelas sebagai fail JSON.

Why i created a lightweight mini spring alternative and how I did it

Fungsi kedua dan utama modul teras ialah suntikan kebergantungan dan penyongsangan kawalan yang berdasarkan corak reka bentuk kilang, jadi kami mempunyai antara muka ApplicationContext yang di dalamnya memanjangkan ComponentFactory antara muka dan kaedah utama antara muka ini ialah kaedah getComponent yang akan mengembalikan objek daripada nama komponen.

Why i created a lightweight mini spring alternative and how I did it

Seperti yang anda lihat dalam tangkapan skrin di atas dahulu, kami cuba menyemak sama ada komponen itu wujud dalam komponen Singleton yang telah dimulakan, jika tidak maka kami mulakan dengan mendapatkan definisi komponen daripada fail JSON kemudian kami memulakan gelung while ke dapatkan semua kebergantungan komponen sebelum menghantar definisi komponen dan kebergantungannya kepada pemasang komponen untuk mendapatkan objek penuh sedia untuk disuntik.

Why i created a lightweight mini spring alternative and how I did it

modul JPA

Pelaksanaan modul JPA sangat serupa dengan data spring JPA tetapi sangat minimum, sebab ia sangat serupa kerana saya menggunakan data spring dalam banyak projek dan saya mendapati ia mudah digunakan dan seperti yang saya katakan sebelum ini, saya mahukan peralihan kepada perpustakaan menjadi lancar dan memerlukan sedikit kerja sebanyak mungkin jadi melaksanakan versi data spring mini saya sendiri adalah pilihan terbaik.

Pelaksanaan adalah di sekitar antara muka JpaRepository yang mengandungi operasi paling biasa untuk pangkalan data seperti simpan, padam dan findAll... dan untuk menggunakan modul JPA anda perlu melanjutkan antara muka ini dan menyediakan entiti yang antara muka ini harus diuruskan dan ia adalah id, kemudian selepas anda memanjangkan antara muka dan anotasi dengan anotasi Repositori, anda boleh menentukan kaedah anda dan anotasikannya dengan anotasi Pertanyaan dan menyediakan pertanyaan JPQL, dan kemudian perpustakaan pada fasa penyusunan akan mencipta kelas berfungsi sepenuhnya yang melaksanakan antara muka ini.

Why i created a lightweight mini spring alternative and how I did it

Why i created a lightweight mini spring alternative and how I did it

Why i created a lightweight mini spring alternative and how I did it

Pustaka juga akan mengurus bahagian transaksi aplikasi, jadi semua antara muka repositori dan mana-mana kelas yang dianotasi dengan transaksi akan diuruskan oleh perpustakaan dari sudut pandangan transaksi. jadi untuk mana-mana komponen transaksi, perpustakaan akan mencipta proksi untuk mengurus transaksi berdasarkan anotasi Transaksi dan juga akan mengurus kitaran hayat pengurus entiti.

Why i created a lightweight mini spring alternative and how I did it

Why i created a lightweight mini spring alternative and how I did it

Modul web

Model web bertanggungjawab untuk mengurus semua bahagian web aplikasi dan mengikut reka bentuk ia adalah modul bebas yang bermakna ia boleh digunakan secara bebas daripada modul lain dalam perpustakaan, seperti biasa ia sangat serupa dalam penggunaan kepada sesetengah perpustakaan Java EE yang biasa seperti web Spring atau Jax-rs.

Pelaksanaan adalah berdasarkan anotasi, anda mempunyai kelas yang diberi anotasi dengan Pengawal anotasi dan di dalam pengawal ini anda akan menemui kaedah beranotasi dengan PathMapping dan kaedah ini akan mengendalikan laluan tertentu atau khusus permintaan berdasarkan beberapa kriteria seperti jenis permintaan, jenis kandungan...

Why i created a lightweight mini spring alternative and how I did it

Why i created a lightweight mini spring alternative and how I did it

Dari luar ia akan kelihatan sangat serupa dengan perpustakaan lain tetapi dari dalam ia berbeza kerana perpustakaan akan menukar kelas Pengawal ini pada masa larian untuk menjadikan kesemuanya memanjangkan BaseHttpServlet , yang juga memanjangkan HttpServlet dan ia akan berfungsi sebagai servlet biasa.

Why i created a lightweight mini spring alternative and how I did it

Seperti yang anda lihat dalam tangkapan skrin di atas, mula-mula kami memulakan komponen dalam kaedah init untuk menyuntik semua kebergantungan menggunakan WebApplicationContext, dan kemudian kami akan mengendalikan semua permintaan datang ke Pengawal ini menggunakan kaedah handleRequest, dengan pendekatan ini kami akan menggunakan api servlet sedia ada untuk menguruskan pengawal, ini akan membantu mengekalkan jejak memori yang rendah dan juga mengurangkan overhed kerana perpustakaan bertindak sebagai pemalam untuk melengkapkan kerja API servlet.

Pertama, kami cuba memetakan permintaan ke kaedah yang betul dan selepas itu, kami cuba menyuntik semua maklumat yang diminta ke dalam kaedah dengan mendapatkan maklumat sama ada dari konteks atau HttpServletRequest seperti permintaan parameter atau pengepala atau pembolehubah laluan atau badan permintaan...

Why i created a lightweight mini spring alternative and how I did it

Why i created a lightweight mini spring alternative and how I did it

Wir konvertieren alle diese Informationen und fügen sie dann als Parameter in die Methode ein, wenn sie angefordert wird. Anschließend führen wir die Methode aus und konvertieren das Ergebnis oder das Ergebnis, das auf PathMapping basiert, oder dem Inhaltstyp (von Standardmäßig ist es application/Json) und dann schreiben wir den Inhalt in die HttpServletResponse.

Wenn im Prozess etwas schief geht und ein Fehler ausgelöst wird, fangen wir diesen Fehler oder die Ausnahme ab und versuchen, ihn basierend auf dem Typ der Ausnahme zu behandeln. Wir haben einen Ausnahmehandler, um verschiedene Arten von Ausnahmen zu behandeln Der Benutzer kann auch mehr Handler bereitstellen, um jede Ausnahme nach seinen Wünschen zu behandeln.

Why i created a lightweight mini spring alternative and how I did it

Why i created a lightweight mini spring alternative and how I did it

Maven-Plugin

Der letzte und wichtige Teil ist das Maven-Plugin, das alle notwendigen Dateien erstellt, damit die Anwendung ordnungsgemäß funktioniert und auch das JAR- oder War-Paket erstellt.
Zuerst scannt das Plugin den Klassenpfad und die Abhängigkeiten, um component-definitions-json-Dateien zu durchsuchen, aus diesen Dateien generiert es:
lazy-application.json: enthält alle Komponenten und ihre Abhängigkeiten für die Anwendung

lazy-application.properties: enthält die Liste der Controller und Entitäten, sodass wir den Klassenpfad zur Laufzeit nicht scannen müssen.
und zuletzt, wenn die Verpackung ein Glas ist, erhalten wir die Hauptklasse.

Why i created a lightweight mini spring alternative and how I did it

Why i created a lightweight mini spring alternative and how I did it

Und zuletzt erstellen wir die Paketarchivdatei, die den Anwendungscode mit seinen Abhängigkeiten und die Dateien enthält, die wir im vorherigen Schritt generiert haben.

Why i created a lightweight mini spring alternative and how I did it

Why i created a lightweight mini spring alternative and how I did it

Ich habe versucht, nicht ins Detail zu gehen, um die Artikel kurz und nicht so kompliziert zu verstehen zu halten. Natürlich ist der Code auf GitHub verfügbar, sodass Sie auch damit spielen können. Wenn Sie Fragen haben, schreiben Sie sie unten und ich werde es versuchen um sie zu beantworten.

Atas ialah kandungan terperinci Mengapa saya mencipta alternatif spring mini yang ringan dan bagaimana saya melakukannya. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn