Jadual Kandungan
5.0, dan kemudian semasa saya menulis kod , saya tiba-tiba mendapati bahawa idea itu adalah Anotasi " >Naik taraf kepada 5.0, dan kemudian semasa saya menulis kod , saya tiba-tiba mendapati bahawa idea itu adalah Anotasi
2.2 基于Setter的依赖注入" >2.2 基于Setter的依赖注入
2.3 基于属性的依赖注入" >2.3 基于属性的依赖注入
3.1 Medan tidak berubah-ubah tidak dibenarkan diisytiharkan fincy berdasarkan medan " >3.1 Medan tidak berubah-ubah tidak dibenarkan diisytiharkan fincy berdasarkan medan
3.4 Ketergantungan Tersembunyi " >3.4 Ketergantungan Tersembunyi
Rumah Java javaTutorial Mengapakah syarikat besar melarang penggunaan anotasi @Autowired dalam projek Spring Boot?

Mengapakah syarikat besar melarang penggunaan anotasi @Autowired dalam projek Spring Boot?

Aug 15, 2023 pm 04:00 PM
spring boot

. ;jarak huruf: 0.034em;saiz fon: 14px;jejari sempadan: 4px;warna latar belakang: rgba(27, 31, 35, 0.05);keluarga fon: "Operator Mono", Consolas, Monaco, Menlo, monospace ;word-break: break-all;color: rgb(239, 112, 96);visibility: visible;">rangka kerja musim bunga 3.0

Naik taraf kepada <span style="outline: 0px;font-size: 16px;visibility: visible;">5.0<span style="outline: 0px;font-size: 20px;visibility: visible;"></span></span>, dan kemudian semasa saya menulis kod , saya tiba-tiba mendapati bahawa idea itu adalah Anotasi

@Autowired

untuk suntikan atribut memberi amaran, seperti di bawah, yang agak mengelirukan, ia telah ditulis seperti ini selama bertahun-tahun.

<span style="outline: 0px;font-size: 16px;visibility: visible;">spring framerwork 3.0</span>升级到<span style="outline: 0px;font-size: 16px;visibility: visible;">5.0</span>Suntikan medan tidak digalakkan

Saya menyemak dokumen yang berkaitan dan mendapati bahawa gesaan ini mula muncul selepas <code style="outline: 0px;visibility: visible;"><span style="outline: 0px;font-size: 16px;visibility: visible;">spring framerwork 4.0</span>以后开始出现的,spring 4.0开始就不推荐使用属性注入,改为推荐构造器注入和setter注入。

下面将展示了spring框架可以使用的不同类型的依赖注入,以及每种依赖注入的适用情况。


2、依赖注入的类型

尽管针对<span style="outline: 0px;font-size: 16px;">spring framerwork 5.1.3</span>spring framerwork 4.0, tetapi ia tidak akan muncul selepas spring 4.0 Adalah disyorkan untuk menggunakan suntikan harta, dan suntikan pembina dan suntikan penetap disyorkan.

🎜🎜🎜Yang berikut akan menunjukkan jenis suntikan kebergantungan yang berbeza yang boleh digunakan oleh rangka kerja spring dan situasi yang berkenaan bagi setiap suntikan kebergantungan. 🎜🎜🎜
🎜

2 Jenis suntikan pergantungan🎜🎜

🎜Walaupun dokumentasi untuk 🎜🎜spring framerwork 5.1.3🎜🎜 hanya mentakrifkan dua jenis utama suntikan pergantungan, sebenarnya terdapat tiga;🎜 🎜Suntikan berasaskan Suntikan berasaskan Suntikan Berbasis-berasaskan Suntikan Berbasis Berbasis Berbasis Berasaskan Suntikan Berbasis Diwhere

    <li style="outline: 0px;font-size: 16px;">Suntikan pergantungan berasaskan medan<section style="margin-top: 5px;margin-bottom: 5px;outline: 0px;line-height: 26px;color: rgb(1, 1, 1);"></section> </li> digunakan secara meluas, tetapi idea atau alat analisis kod statik lain akan memberikan mesej segera dan tidak disyorkan.
  • Anda juga boleh melihat kaedah suntikan ini dalam beberapa panduan Spring rasmi:
  • 2.1 Suntikan kebergantungan berasaskan konstruktor

fungsi binaan berasaskan suntikan @ bukan binaan Autowired dan mengandungi beberapa parameter yang berkaitan dengan objek yang akan disuntik.

@Component
public class ConstructorBasedInjection {

    private final InjectedBean injectedBean;

    @Autowired
    public ConstructorBasedInjection(InjectedBean injectedBean) {
        this.injectedBean = injectedBean;
    }
}
Salin selepas log masuk
<span style="outline: 0px;font-size: 16px;">基于字段的依赖注入</span>Kemudian dalam dokumen rasmi musim bunga, anotasi @Autowired juga boleh ditinggalkan.

public class SimpleMovieLister {

    // the SimpleMovieLister has a dependency on a MovieFinder
    private MovieFinder movieFinder;

    // a constructor so that the Spring container can inject a MovieFinder
    public SimpleMovieLister(MovieFinder movieFinder) {
        this.movieFinder = movieFinder;
    }

    // business logic that actually uses the injected MovieFinder is omitted...
}
Salin selepas log masuk

基于构造函数注入的主要优点是可以将需要注入的字段声明为final, 使得它们会在类实例化期间被初始化,这对于所需的依赖项很方便。

2.2 基于Setter的依赖注入

在基于setter的依赖注入中,setter方法被标注为 @Autowired。一旦使用无参数构造函数或无参数静态工厂方法实例化Bean,为了注入Bean的依赖项,Spring容器将调用这些setter方法。

@Component
public class SetterBasedInjection {

    private InjectedBean injectedBean;

    @Autowired
    public void setInjectedBean(InjectedBean injectedBean) {
        this.injectedBean = injectedBean;
    }
}
Salin selepas log masuk

和基于构造器的依赖注入一样,在官方文档中,基于Setter的依赖注入中的 @Autowired也可以省去。

public class SimpleMovieLister {

    // the SimpleMovieLister has a dependency on the MovieFinder
    private MovieFinder movieFinder;

    // a setter method so that the Spring container can inject a MovieFinder
    public void setMovieFinder(MovieFinder movieFinder) {
        this.movieFinder = movieFinder;
    }

    // business logic that actually uses the injected MovieFinder is omitted...
}
Salin selepas log masuk

2.3 基于属性的依赖注入

在基于属性的依赖注入中,字段/属性被标注为 @Autowired。一旦类被实例化,Spring容器将设置这些字段。

@Component
public class FieldBasedInjection {
    @Autowired
    private InjectedBean injectedBean;
}
Salin selepas log masuk

正如所看到的,这是依赖注入最干净的方法,因为它避免了添加样板代码,并且不需要声明类的构造函数。代码看起来很干净简洁,但是正如代码检查器已经向我们暗示的那样,这种方法有一些缺点。


3. Kecacatan suntikan kebergantungan berasaskan medan

3.1 Medan tidak berubah-ubah tidak dibenarkan diisytiharkan fincy berdasarkan medan

s diisytiharkan sebagai muktamad/tidak berubah Tidak berfungsi kerana medan ini mesti dijadikan instantiated apabila kelas itu instantiated. Satu-satunya cara untuk mengisytiharkan kebergantungan tidak berubah adalah dengan menggunakan suntikan kebergantungan berasaskan pembina.

3.2 Mudah untuk melanggar prinsip reka bentuk tanggungjawab tunggal

Dalam pengaturcaraan berorientasikan objek, lima prinsip reka bentuk SOLID digunakan secara meluas (biasanya enam prinsip reka bentuk di China) untuk meningkatkan kebolehgunaan semula kod. Kebolehbacaan, kebolehpercayaan dan kebolehselenggaraan

S dalam

SOLID mewakili prinsip tanggungjawab tunggal, iaitu, kelas hanya perlu bertanggungjawab untuk satu tanggungjawab, dan semua perkhidmatan yang disediakan oleh kelas ini hanya perlu bertanggungjawab ke atas tanggungjawab yang dipertanggungjawabkan. untuk Hidangkan.

Menggunakan suntikan kebergantungan berasaskan medan, untuk kelas yang kerap digunakan, dari masa ke masa, kami secara beransur-ansur akan menambah lebih banyak kebergantungan pada kelas Kami sangat gembira dengannya, dan lebih mudah untuk mengabaikan kebergantungan dalam kelas . Tetapi jika anda menggunakan suntikan kebergantungan berasaskan pembina, kerana semakin banyak kebergantungan ditambahkan pada kelas, pembina akan menjadi lebih besar dan lebih besar, dan kita boleh memberitahu ada sesuatu yang salah sepintas lalu.

Mempunyai pembina dengan lebih daripada 10 parameter adalah petanda jelas bahawa kelas telah berubah menjadi koleksi fungsi yang besar dan komprehensif dan perlu dipecahkan kepada bahagian yang lebih kecil dan lebih boleh diselenggara.

Jadi, walaupun suntikan harta bukan punca langsung melanggar prinsip tanggungjawab tunggal, ia menyembunyikan isyarat dan memudahkan kita mengabaikannya. . Akhirnya, ini bermakna bahawa satu-satunya cara untuk menetapkan medan ini adalah dengan membuat instantiate kelas melalui bekas Spring dan menyuntiknya menggunakan pantulan, jika tidak medan akan kekal batal.

Corak reka bentuk Suntikan Ketergantungan memisahkan penciptaan kebergantungan kelas daripada kelas itu sendiri dan memindahkan tanggungjawab ini kepada bekas suntikan kelas, membolehkan reka bentuk program dipisahkan dan mengikut prinsip penyongsangan tanggungjawab dan kebergantungan tunggal (sama-sama boleh dipercayai ). Oleh itu, penyahgandingan kelas yang dicapai oleh medan pendawaian automatik akhirnya hilang dengan menggabungkannya semula ke bekas suntikan kelas (Spring dalam kes ini), sekali gus menjadikan kelas tidak berguna di luar bekas Spring.

Ini bermakna jika anda ingin menggunakan kelas anda di luar bekas aplikasi, contohnya untuk ujian unit, anda akan terpaksa menggunakan bekas Spring untuk membuat instantiate kelas anda kerana tiada cara lain yang mungkin (kecuali refleksi) untuk menyediakan medan pendawaian automatik.

3.4 Ketergantungan Tersembunyi

Apabila menggunakan suntikan kebergantungan, kelas yang terjejas harus mendedahkan kebergantungan ini dengan jelas menggunakan antara muka awam, dengan mendedahkan kebergantungan yang diperlukan dalam pembina, atau menggunakan Kaedah (penetap) mendedahkan kebergantungan pilihan. Apabila menggunakan suntikan kebergantungan berasaskan medan, kebergantungan ini pada dasarnya tersembunyi dari dunia luar.


4. Ringkasan

Kita telah melihat bahawa suntikan berasaskan lapangan harus dielakkan sebanyak mungkin kerana ia mempunyai banyak kelemahan, tidak kira betapa elegannya ia kelihatan. Pendekatan yang disyorkan ialah menggunakan suntikan pergantungan berasaskan pembina dan penetap.

Untuk kebergantungan yang diperlukan, disyorkan untuk menggunakan suntikan berasaskan pembina, menjadikannya tidak berubah dan mengelakkannya daripada menjadi batal. Untuk kebergantungan pilihan, disyorkan untuk menggunakan suntikan berasaskan setter.

Atas ialah kandungan terperinci Mengapakah syarikat besar melarang penggunaan anotasi @Autowired dalam projek Spring Boot?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Spring Boot+MyBatis+Atomikos+MySQL (dengan kod sumber) Spring Boot+MyBatis+Atomikos+MySQL (dengan kod sumber) Aug 15, 2023 pm 04:12 PM

Dalam projek sebenar, kami cuba mengelakkan transaksi yang diedarkan. Walau bagaimanapun, kadangkala ia benar-benar perlu untuk melakukan beberapa pemisahan perkhidmatan, yang akan membawa kepada masalah transaksi yang diedarkan. Pada masa yang sama, transaksi yang diedarkan juga ditanya di pasaran semasa temu bual Anda boleh berlatih dengan kes ini, dan anda boleh bercakap tentang 123 dalam temu bual.

Mencapai sokongan berbilang bahasa dan aplikasi antarabangsa melalui Spring Boot Mencapai sokongan berbilang bahasa dan aplikasi antarabangsa melalui Spring Boot Jun 23, 2023 am 09:09 AM

Dengan perkembangan globalisasi, semakin banyak laman web dan aplikasi perlu menyediakan sokongan berbilang bahasa dan fungsi pengantarabangsaan. Bagi pembangun, melaksanakan fungsi ini bukanlah tugas yang mudah kerana ia memerlukan pertimbangan dari banyak aspek, seperti terjemahan bahasa, tarikh, masa dan format mata wang, dsb. Walau bagaimanapun, menggunakan rangka kerja SpringBoot, kami boleh melaksanakan sokongan berbilang bahasa dan aplikasi antarabangsa dengan mudah. Mula-mula, marilah kita memahami antara muka LocaleResolver yang disediakan oleh SpringBoot. Loc

Cara menggunakan Spring Boot untuk membina aplikasi blockchain dan kontrak pintar Cara menggunakan Spring Boot untuk membina aplikasi blockchain dan kontrak pintar Jun 22, 2023 am 09:33 AM

Dengan peningkatan mata wang digital seperti Bitcoin, teknologi blockchain secara beransur-ansur menjadi topik hangat. Kontrak pintar boleh dianggap sebagai bahagian penting dalam teknologi blockchain. SpringBoot, sebagai rangka kerja pembangunan back-end Java yang popular, juga boleh digunakan untuk membina aplikasi blockchain dan kontrak pintar. Artikel ini akan memperkenalkan cara menggunakan SpringBoot untuk membina aplikasi dan kontrak pintar berdasarkan teknologi blockchain. 1. SpringBoot dan blockchain Pertama, kita perlu memahami beberapa konsep asas yang berkaitan dengan blockchain. Rantaian sekat

Laksanakan pemetaan ORM berdasarkan Spring Boot dan MyBatis Plus Laksanakan pemetaan ORM berdasarkan Spring Boot dan MyBatis Plus Jun 22, 2023 pm 09:27 PM

Dalam proses pembangunan aplikasi web Java, teknologi pemetaan ORM (Object-RelationalMapping) digunakan untuk memetakan data hubungan dalam pangkalan data kepada objek Java, menjadikannya mudah untuk pembangun mengakses dan mengendalikan data. SpringBoot, sebagai salah satu rangka kerja pembangunan web Java yang paling popular pada masa ini, telah menyediakan cara untuk mengintegrasikan MyBatis, dan MyBatisPlus ialah rangka kerja ORM yang dilanjutkan berdasarkan MyBatis.

Penyepaduan dan penggunaan pangkalan data Spring Boot dan NoSQL Penyepaduan dan penggunaan pangkalan data Spring Boot dan NoSQL Jun 22, 2023 pm 10:34 PM

Dengan perkembangan Internet, analisis data besar dan pemprosesan maklumat masa nyata telah menjadi keperluan penting bagi perusahaan. Untuk memenuhi keperluan tersebut, pangkalan data hubungan tradisional tidak lagi memenuhi keperluan pembangunan perniagaan dan teknologi. Sebaliknya, menggunakan pangkalan data NoSQL telah menjadi pilihan penting. Dalam artikel ini, kita akan membincangkan penggunaan SpringBoot yang disepadukan dengan pangkalan data NoSQL untuk membolehkan pembangunan dan penggunaan aplikasi moden. Apakah pangkalan data NoSQL?

Cara menggunakan Spring Boot untuk membina aplikasi pemprosesan data besar Cara menggunakan Spring Boot untuk membina aplikasi pemprosesan data besar Jun 23, 2023 am 09:07 AM

Dengan kemunculan era data besar, semakin banyak syarikat mula memahami dan mengiktiraf nilai data besar dan menerapkannya dalam perniagaan. Masalah yang datang dengannya ialah bagaimana mengendalikan aliran data yang besar ini. Dalam kes ini, aplikasi pemprosesan data besar telah menjadi sesuatu yang mesti dipertimbangkan oleh setiap perusahaan. Bagi pembangun, cara menggunakan SpringBoot untuk membina aplikasi pemprosesan data besar yang cekap juga merupakan isu yang sangat penting. SpringBoot ialah rangka kerja Java yang sangat popular yang membolehkan

Caching data dan sistem storan teragih berdasarkan Spring Boot Caching data dan sistem storan teragih berdasarkan Spring Boot Jun 22, 2023 am 09:48 AM

Dengan pembangunan dan pempopularan Internet yang berterusan, permintaan untuk pemprosesan dan penyimpanan data juga semakin meningkat Cara memproses dan menyimpan data dengan cekap dan boleh dipercayai telah menjadi topik hangat di kalangan industri dan penyelidik. Sistem caching dan penyimpanan data yang diedarkan berdasarkan SpringBoot adalah penyelesaian yang telah menarik banyak perhatian dalam beberapa tahun kebelakangan ini. Apakah sistem caching dan penyimpanan data teragih? Sistem caching dan penyimpanan data teragih merujuk kepada penyimpanan data teragih melalui berbilang nod (pelayan), yang meningkatkan keselamatan dan kebolehpercayaan data dan juga boleh meningkatkan pemprosesan data.

Bina sistem ESB menggunakan Spring Boot dan Apache ServiceMix Bina sistem ESB menggunakan Spring Boot dan Apache ServiceMix Jun 22, 2023 pm 12:30 PM

Memandangkan perniagaan moden semakin bergantung pada pelbagai aplikasi dan sistem yang berbeza, integrasi perusahaan menjadi lebih penting. Bas Perkhidmatan Perusahaan (ESB) ialah model seni bina integrasi yang menghubungkan sistem dan aplikasi yang berbeza bersama-sama untuk menyediakan pertukaran data biasa dan perkhidmatan penghalaan mesej untuk mencapai penyepaduan aplikasi peringkat perusahaan. Menggunakan SpringBoot dan ApacheServiceMix, kami boleh membina sistem ESB dengan mudah Artikel ini akan memperkenalkan cara melaksanakannya. SpringBoot dan A

See all articles