Masuk lebih dalam ke Spring dan mulai dari kode sumber!
Jelajahi kerangka kerja Java yang paling populer, pahami mekanisme internalnya, dan bawa Anda dari pemula hingga mahir.
⚡ Teknologi |. Pendahuluan |. ? Mengapa |. Seperti bintang |.?
⚡Teknologi
Perkenalan
Halo semuanya, nama saya Lex?. Saya seorang pengembang back-end Java dengan pengalaman 8 tahun dan seorang programmer yang menyukai kerangka Spring❤️. Untuk membantu programmer yang ingin mempelajari lebih lanjut tentang framework Spring, saya membuat "Seri Membaca Kode Sumber Spring" ini. Melalui seri ini, saya berharap dapat menjelajahi cara kerja Musim Semi bersama Anda. Jika Anda memiliki minat atau pertanyaan yang sama, silakan hubungi saya!
? Mengapa analisis kode sumber Spring ?
Dalam pekerjaan saya sebagai pengembang yang mengerjakan kerangka kerja, saya sering menghadapi situasi di mana saya perlu memahami secara mendalam dan menyesuaikan perilaku kerangka kerja. Tugas-tugas ini tidak hanya sekedar menggunakan API kerangka kerja, tetapi juga memerlukan pemahaman rinci tentang cara kerja internal kerangka kerja. Meskipun ada versi Spring yang disederhanakan di Github, yang memang sangat membantu untuk memulai, jika menyangkut aplikasi proyek nyata, versi tersebut masih sangat berbeda dari kerangka Spring yang sebenarnya. Oleh karena itu, saya mulai mempelajari kode sumber Spring, berharap dapat memahami mekanisme kerja internalnya secara lebih menyeluruh sehingga saya dapat menerapkannya dengan lebih baik pada pekerjaan saya yang sebenarnya. Berbagi analisis kode sumber saya juga untuk memberikan beberapa referensi dan bantuan kepada pengembang yang ingin benar-benar memahami Spring, bukan hanya sekedar menggunakannya.
Beri aku bintang saja
Teman-teman terkasih, saya benar-benar menghabiskan banyak waktu untuk meneliti dan mengatur "Seri Membaca Kode Sumber Musim Semi" ini. Jika menurut Anda hal ini tidak buruk, atau memberi Anda sedikit bantuan, silakan klik bintangnya. Itu sangat berarti bagiku, dan setiap bintang membuatku merasa semua kerja keras tidak sia-sia. Saya tahu ini adalah hal kecil, tetapi klik Anda adalah penyemangat terbaik bagi saya. Bagaimanapun, terima kasih telah meluangkan waktu untuk membaca konten saya, saya sangat menghargainya!
Seri pembacaan kode sumber musim semi
Inti Musim Semi
Pemuatan dan akses sumber daya
Sumber daya: antarmuka abstrak, mewakili file, jalur kelas, dll., digunakan untuk mengakses sumber daya dari sumber berbeda.
ResourceLoader: Antarmuka inti untuk akuisisi sumber daya, yang menerapkan strategi memuat sumber daya secara seragam dari lokasi berbeda.
ResourcePatternResolver: Antarmuka resolusi pola sumber daya, digunakan untuk memuat banyak sumber daya secara fleksibel dalam aplikasi.
DocumentLoader: Memuat dokumen XML dan menguraikan antarmuka inti, mendukung konfigurasi otomatis aplikasi Spring di latar belakang.
Metadata dan pemfilteran
MetadataReader: Inti akuisisi metadata kelas, mendukung fungsi lanjutan seperti pemindaian komponen, anotasi bersyarat, dan AOP.
AnnotationMetadata: Mendapatkan dan mengoperasikan informasi anotasi kelas runtime secara dinamis.
TypeFilter: Sesuaikan pemfilteran kelas selama pemindaian komponen, mendukung kondisi kompleks dan pemfilteran yang tepat.
Kondisi: Penilaian bersyarat, mekanisme fleksibel yang menentukan pembuatan dan konfigurasi Bean.
Validasi, pengikatan data, dan konversi tipe
Validator: Menyediakan logika validasi data khusus untuk memastikan bahwa objek model memenuhi aturan bisnis.
PropertyEditor: Sesuaikan logika konversi properti JavaBean dan tangani konversi tipe properti.
Konverter: digunakan untuk konversi antara tipe yang berbeda, mendefinisikan aturan konversi sumber sederhana ke tipe target.
ConverterFactory: Membuat konverter untuk tipe sumber tertentu untuk konversi tipe.
GenericConverter: Konverter yang lebih kompleks yang mendukung beberapa sumber dan jenis konversi target.
ConditionalConverter: Konverter yang memilih apakah akan melakukan konversi berdasarkan kondisi.
ConversionService: Menyediakan antarmuka layanan konversi tipe terpadu dan mengelola konverter.
Printer: Digunakan untuk memformat objek menjadi teks, dengan fokus pada keluaran yang diformat.
Parser: digunakan untuk mengurai teks menjadi objek, dengan fokus pada logika parsing.
Bahasa Ekspresi Musim Semi (SpEL)
ExpressionParser: Mengurai ekspresi SpEL dalam bentuk string, membuat dan mengembalikan instance Expression.
Ekspresi: Fungsi mengevaluasi string ekspresi, mendukung operasi seperti konversi tipe dan mendapatkan string asli.
EvaluationContext: mengelola informasi konteks ekspresi SpEL.
PropertyAccessor: Digunakan untuk membaca dan menulis properti objek, dan dapat digunakan untuk mengimplementasikan logika akses properti khusus.
ConstructorResolver: Mengurai konstruktor untuk menentukan bagaimana kacang dipakai.
MethodResolver: Selesaikan metode kelas untuk memastikan panggilan yang benar, menangani kelebihan beban, dan pencocokan parameter.
BeanResolver: Mengurai definisi kacang, termasuk dependensi, pengaturan properti, instantiasi, dan pengembalian.
TypeLocator: secara dinamis mencari kelas dan mengembalikan objek Kelas, digunakan dalam penguraian ekspresi, konversi tipe, dll.
TypeConverter: Fungsi konversi tipe yang mengonversi data dalam ekspresi dari satu tipe ke tipe lainnya.
TypeComparator: Fungsi perbandingan tipe, yang mendefinisikan metode untuk membandingkan apakah dua objek sama.
OperatorOverloader: Fungsi kelebihan operator, metode untuk menyesuaikan operator dalam ekspresi.
Definisi dan registrasi kacang
BeanDefinition: Jelaskan Bean secara detail dan dukung fungsi inti seperti injeksi ketergantungan, AOP, dan kontrol cakupan.
BeanDefinitionHolder: Kelas kunci untuk mengelola dan mengoperasikan BeanDefinition.
XmlBeanDefinitionReader: Memuat dan mengurai konfigurasi XML, membangun wadah IOC, dan mendaftarkan definisi Bean.
PropertiesBeanDefinitionReader: File properti dimuat dan diuraikan ke dalam definisi Bean.
GroovyBeanDefinitionReader: Skrip Groovy diurai menjadi definisi Bean.
AnnotatedBeanDefinitionReader: Konfigurasi anotasi, secara otomatis memindai dan mendaftarkan komponen Spring, dan menyederhanakan konfigurasi definisi Bean.
ClassPathBeanDefinitionScanner: Pemindaian jalur kelas mendaftarkan Spring Beans, mendukung perakitan otomatis.
Pabrik kacang
BeanFactory: Antarmuka inti Spring, menyediakan fungsi dasar untuk konfigurasi, pembuatan, dan manajemen Bean.
ListableBeanFactory: Mendukung perolehan koleksi kacang berdasarkan jenisnya.
HierarchicalBeanFactory: mendukung hubungan container induk-anak dan mengimplementasikan struktur hierarki definisi Bean.
ConfigurableBeanFactory: Menyediakan ekstensi untuk konfigurasi BeanFactory, seperti editor properti, cakupan, dll.
AutowireCapableBeanFactory: Antarmuka fungsional inti untuk pembuatan, inisialisasi, injeksi, dan penghancuran Bean.
ConfigurableListableBeanFactory: Antarmuka pabrik Bean yang dapat dikonfigurasi yang mendukung konfigurasi dan operasi daftar.
konteks wadah
ClassPathXmlApplicationContext: Konteks tempat classpath memuat file konfigurasi XML.
AnnotationConfigApplicationContext: Konteks untuk memuat informasi konfigurasi di kelas konfigurasi anotasi.
GenericApplicationContext: Mendukung beberapa metode konfigurasi, XML, anotasi, dan konteks yang didaftarkan secara manual.
Impor dan kombinasi definisi kacang
ImportBeanDefinitionRegistrar: mendaftarkan beans secara dinamis saat runtime untuk mencapai konfigurasi yang fleksibel dan memperluas fungsi kelas konfigurasi.
ImportSelector: mengimpor kelas konfigurasi secara dinamis saat runtime untuk mencapai pemilihan bersyarat dan konfigurasi yang fleksibel.
DeferredImportSelector: Mengimpor konfigurasi secara dinamis saat runtime, mendukung pemilihan bersyarat dan penundaan pemuatan berdasarkan grup.
Siklus hidup kacang
Proses registrasi definisi Bean: memuat dan mengurai file konfigurasi, mendaftarkan dan mengurai definisi Bean, nama kelas, cakupan, atribut, dll.
Proses inisialisasi kacang: instantiasi, injeksi properti, panggilan balik Sadar, pasca-prosesor, panggilan metode inisialisasi.
Proses resolusi ketergantungan Bean: mendeklarasikan dependensi, menemukan dependensi, menyuntikkan dependensi, menangani dependensi melingkar, dan menunda resolusi ketergantungan.
Proses pemusnahan kacang: pemanggilan metode pemusnahan, panggilan balik antarmuka, pembersihan pasca-pemrosesan, pemicuan notifikasi, daur ulang sumber daya GC.
Penguraian properti dan konfigurasi lingkungan
PropertySource: Kelas abstrak yang mengelola berbagai sumber konfigurasi dan mendukung pemuatan dan akses konfigurasi aplikasi yang fleksibel.
PropertySources: Digunakan untuk mengelola dan mengakses beberapa instance PropertySource secara seragam, menyederhanakan pemrosesan data konfigurasi.
PropertyResolver: Penguraian properti universal, memperoleh nilai konfigurasi, menangani properti yang hilang, sederhana dan fleksibel.
ConfigurablePropertyResolver: Konfigurasi penguraian properti dan pengaturan placeholder untuk beradaptasi dengan kebutuhan konfigurasi yang berbeda.
Lingkungan: Representasi lingkungan aplikasi, menyediakan akses atribut, mendukung file konfigurasi, dan mewujudkan konfigurasi dinamis.
ConfigurableEnvironment: Konfigurasikan lingkungan aplikasi secara dinamis, aktifkan dan konfigurasi default, serta tingkatkan fleksibilitas aplikasi.
Inisialisasi kacang dan titik ekstensi
InitializingBean: Menyediakan antarmuka untuk mengeksekusi logika khusus selama inisialisasi Bean.
Sekali PakaiBean: Mendefinisikan antarmuka untuk melakukan operasi pembersihan sebelum Bean dihancurkan.
BeanDefinitionRegistryPostProcessor: Memodifikasi atau menambahkan BeanDefinition secara dinamis saat kontainer dimulai.
BeanFactoryPostProcessor: Memodifikasi atau mengkonfigurasi BeanFactory secara global sebelum membuat instance Bean.
BeanPostProcessor: Melakukan pemrosesan khusus sebelum dan sesudah inisialisasi Bean, yang dapat memengaruhi semua Bean.
InstantiationAwareBeanPostProcessor: Memberikan instantiasi yang lebih mendalam dan kontrol injeksi properti.
DestructionAwareBeanPostProcessor: Memungkinkan operasi pembersihan tambahan sebelum Bean dihancurkan.
MergedBeanDefinitionPostProcessor: Memproses BeanDefinition saat menggabungkan definisi Bean.
SmartInstantiationAwareBeanPostProcessor: Memberikan kontrol instantiasi yang lebih cerdas.
SmartInitializingSingleton: Jalankan logika khusus setelah semua singleton beans diinisialisasi.
Seri antarmuka sadar
BeanNameAware: Biarkan Bean mendapatkan namanya sendiri di dalam wadah.
BeanClassLoaderAware: Mengizinkan bean mendapatkan pemuat kelasnya.
BeanFactoryAware: Menyediakan Bean untuk mendapatkan BeanFactory miliknya.
EnvironmentAware: Memungkinkan kacang untuk mendapatkan konfigurasi lingkungan aplikasi.
EmbeddedValueResolverAware: Mengizinkan kacang menyelesaikan placeholder nilai yang disematkan.
ResourceLoaderAware: Memungkinkan kacang untuk mendapatkan pemuat sumber daya.
ApplicationEventPublisherAware: Memungkinkan kacang untuk mempublikasikan acara aplikasi.
MessageSourceAware: Memungkinkan Bean mendapatkan sumber pesan.
ApplicationContextAware: Memungkinkan kacang untuk mendapatkan konteks aplikasi.
ImportAware: Mengizinkan kelas konfigurasi yang diimpor memperoleh informasi tentang kelas yang mengimpornya.
Anotasi inti
@Configuration: Deklarasikan kelas sebagai kelas konfigurasi dan tentukan ketergantungan antara beans dan beans.
@ComponentScan: Memungkinkan pemindaian komponen untuk secara otomatis menemukan dan mendaftarkan kelas yang ditandai sebagai komponen.
@Bean: Deklarasikan metode di kelas konfigurasi dan kembalikan instance Bean.
@Import: Perkenalkan kelas konfigurasi lain dan gabungkan definisi Bean-nya ke dalam container saat ini.
@PropertySource: Tentukan file properti dan muat konfigurasi eksternal ke lingkungan.
@DependsOn: Tentukan urutan ketergantungan kacang untuk memastikan bahwa kacang tertentu diinisialisasi sebelum kacang lainnya.
@Conditional: Tentukan apakah akan membuat kacang berdasarkan kondisi.
@Lazy: Menentukan inisialisasi lambat pada kacang, yang hanya dibuat saat pertama kali digunakan.
@Value: Memasukkan nilai atau ekspresi sederhana ke dalam parameter bidang atau metode Bean.
@Autowired: Secara otomatis merakit dependensi Bean.
@Primary: Menentukan biji pilihan yang akan dipilih terlebih dahulu di antara beberapa kandidat kacang.
@Deskripsi: Berikan informasi deskriptif untuk Bean.
@Peran: Memberikan petunjuk peran kacang untuk membedakan kacang dari jenis yang serupa.
@Indexed: Menandai kacang untuk pengindeksan.
@Order: Tentukan urutan pemuatan kacang.
spesifikasi JSR
@Inject: anotasi injeksi ketergantungan standar JSR-330.
@Bernama: anotasi penamaan standar JSR-330.
@Resource: Anotasi injeksi sumber daya standar Java EE.
@Qualifier: digunakan untuk memenuhi syarat kacang yang disuntikkan.
@Scope: Menentukan cakupan Bean.
@Singleton: Tentukan Bean sebagai singleton.
@PostConstruct: Tentukan metode inisialisasi.
@PreDestroy: Tentukan metode penghancuran.
Penyedia: Antarmuka pabrik Bean umum yang disediakan oleh perpustakaan standar Java.
Musim semi AOP
Proksi dinamis JDK: implementasi antarmuka, pembuatan kelas proksi dinamis, pemanggilan metode pemrosesan, dan masalah lintas sektoral terpadu.
Proksi dinamis Cglib: Pustaka berdasarkan pembuatan bytecode, tidak memerlukan antarmuka, dan dapat mencegat metode kelas serta menyempurnakannya.
ClassFilter: Menentukan apakah kelas cocok dengan kondisi intersepsi.
MethodMatcher: Tentukan apakah metode tersebut cocok dengan kondisi intersepsi.
Pointcut: Tentukan titik masuk dan cocokkan metode yang dicegat.
Saran: Antarmuka inti di AOP yang mendefinisikan berbagai perilaku jenis notifikasi.
MethodInterceptor: Mencegat eksekusi metode, memungkinkan logika tambahan ditambahkan sebelum dan sesudah.
MethodBeforeAdvice: Memungkinkan logika khusus dimasukkan sebelum pemanggilan metode.
AfterReturningAdvice: Memungkinkan logika khusus dimasukkan setelah pemanggilan metode. <
ThrowsAdvice: Pemberitahuan pengecualian, menangkap pengecualian yang diberikan oleh metode, dan melakukan logika tambahan.
PendahuluanInterceptor: Secara dinamis memperkenalkan fungsionalitas atau properti baru ke objek target.
Penasihat: Digunakan untuk menggabungkan pemberitahuan dan petunjuk untuk mewujudkan masalah lintas sektoral dalam pemrograman aspek.
Disarankan: Konfigurasikan notifikasi, pemberi notifikasi, target, dll. dari agen AOP.
ProxyFactory: Cara mudah untuk membuat objek proxy.
AopProxyFactory: Membuat pabrik proxy AOP, mendukung JDK dan CGLIB.
AopProxy: Membuat dan mengelola objek proxy AOP.
AdvisorChainFactory: Antarmuka pabrik untuk membuat rantai Penasihat.
AdvisorAdapterRegistry: Sesuaikan berbagai Saran ke pencegat AOP, daftarkan dan kelola adaptor Advisor.
AdvisorAdapter: Menyesuaikan berbagai jenis notifikasi ke rantai pencegat.
ProxyMethodInvocation: Proksi pemanggilan metode AOP, menangani rantai interseptor dan pemanggilan metode.
AnnotationAwareAspectJAutoProxyCreator: Membuat proksi AOP untuk menerapkan aspek gaya AspectJ.
BeanFactoryAdvisorRetrievalHelper: Membantu mengambil dan mengelola Advisor Beans di Spring AOP.
BeanFactoryAspectJAdvisorsBuilder: Bangun aspek anotasi @AspectJ dan hasilkan Spring AOP Advisors.
AspectInstanceFactory: Membuat instance aspek dan mendukung beberapa metode implementasi.
MetadataAwareAspectInstanceFactory: mengelola instance aspek dan metadata, serta mendukung beberapa strategi instantiasi.
AspectJAdvisorFactory: Membuat instance notifikasi AspectJ dan mengelola pembuatan dan konfigurasi notifikasi aspek.
TargetSource: mengelola akuisisi dan pelepasan objek proxy AOP.
TargetSourceCreator: Membuat sumber target khusus dan menyesuaikan pembuatan dan pengelolaan objek proksi.
AopContext: Alat untuk mendapatkan objek proxy Spring AOP.
ExposeInvocationInterceptor: Interseptor yang mengekspos konteks pemanggilan metode Spring AOP.
@EnableLoadTimeWeaving: Mengaktifkan penenunan waktu muat pegas.
Transaksi musim semi
Koneksi: mengelola koneksi database, mengeksekusi SQL, dan memproses transaksi.
DataSource: Menyediakan antarmuka untuk manajemen koneksi database yang efisien.
DriverManager: Kelas inti untuk mengelola dan membuat koneksi database.
JdbcTemplate: Menyederhanakan operasi JDBC dan menyediakan abstraksi akses database yang nyaman.
TransactionDefinition: Mendefinisikan perilaku propagasi transaksi dan tingkat isolasi.
TransactionAttributeSource: Antarmuka strategi untuk mendapatkan atribut transaksi.
PlatformTransactionManager: digunakan untuk mengelola dan mengoordinasikan siklus hidup dan eksekusi transaksi.
TransactionTemplate: Menyederhanakan manajemen transaksi dan mendukung kontrol transaksi terprogram dan penanganan pengecualian.
SpringTransactionAnnotationParser: Parsing anotasi @Transactional dan ubah menjadi konfigurasi transaksi.
TransactionInterceptor: Interseptor transaksi, digunakan untuk mengelola pemrosesan transaksi tingkat metode.
EnableTransactionManagement: Aktifkan manajemen transaksi berbasis anotasi Spring.
Musim SemiMVC
SpringOpenBerpura-pura
Hubungi saya
✉️ Email |. Masalah |. CSDN Saya tentang semuanya!
⛵Kontribusi diterima!
Jika Anda menemukan kesalahan atau memiliki saran perbaikan, silakan kirimkan masalah atau permintaan penarikan. Masukan Anda sangat berharga bagi saya!
Terus memperbarui
Untuk memberi Anda konten terbaru dan paling berharga, saya akan terus memperbarui gudang ini setiap hari⏳. Setiap hari, Anda dapat melihat beberapa konten baru atau peningkatan pada konten yang sudah ada. Jika Anda memiliki saran atau masukan, jangan ragu untuk menghubungi saya?. Saya menghargai setiap masukan karena itu adalah motivasi saya untuk perbaikan terus-menerus.
Sejarah Bintang
?Pengamat bintang
?Forker
?Undang saya ke kotak makan siang?
Penulis harus menulis blog di malam hari✍️ dan juga harus bekerja di hari kerja. Jika Anda bisa membantu saya, bisakah Anda memberi saya makan siang?
Ikuti akun publik
Setelah mengikuti, balas dengan kata kunci "tambahkan grup" untuk bergabung dengan grup pertukaran teknis kami untuk berkomunikasi dan belajar dengan lebih banyak pengembang.