Upravljanje redoslijedom izrade zrna pomoću bilješke @DependsOn

1. Pregled

Spring, prema zadanim postavkama, upravlja životnim ciklusom graha i uređuje njihov redoslijed inicijalizacije.

Ali, još uvijek ga možemo prilagoditi na temelju naših potreba. Možemo odabrati bilo koji SmartLifeCycle sučelje ili @Ovisi o napomena za upravljanje redoslijedom inicijalizacije.

Ovaj tutorial istražuje @Ovisi o napomena i njezino ponašanje u slučaju nestanka graha ili kružne ovisnosti. Ili u slučaju da jednostavno treba jedan grah inicijaliziran prije drugog.

2. Maven

Prije svega, uvezimo ovisnost o proljetnom kontekstu u naš pom.xml datoteka. Uvijek bismo se trebali obratiti Maven Centralu za najnoviju verziju ovisnosti:

 org.springframework proljeće-kontekst 5.2.8.OSLOBOĐENJE 

3. @Ovisi o

Ovu bismo bilješku trebali koristiti za specificiranje ovisnosti graha. Spring jamči da će definirani grah biti inicijaliziran prije pokušaja inicijalizacije trenutnog graha.

Recimo da imamo a FileProcessor što ovisi o a Čitač datoteka i FileWriter. U ovom slučaju, Čitač datoteka i FileWriter treba inicijalizirati prije FileProcessor.

4. Konfiguracija

Konfiguracijska datoteka je čista Java klasa s @Konfiguracija napomena:

@Configuration @ComponentScan ("com.baeldung.dependson") javna klasa Config {@Bean @DependsOn ({"fileReader", "fileWriter"}) javni FileProcessor fileProcessor () {return new FileProcessor (); } @Bean ("fileReader") javni FileReader fileReader () {vratiti novi FileReader (); } @Bean ("fileWriter") javni FileWriter fileWriter () {vratiti novi FileWriter (); }}

FileProcessor određuje svoje ovisnosti s @Ovisi o. Također možemo označiti a Komponenta s @Ovisi o:

@Component @DependsOn ({"filereader", "fileWriter"}) javna klasa FileProcessor {}

5. Upotreba

Stvorimo jedan razred Datoteka. Svaki od graha ažurira tekst iznutra Datoteka. Čitač datoteka ažurira ga kao pročitano. FileWriter ažurira ga kao write i FileProcessor ažurira tekst kako je obrađen:

@Test public void WhenFileProcessorIsCreated_FileTextContains_Processed () {FileProcessor procesor = context.getBean (FileProcessor.class); assertTrue (processor.process (). ENDWith ("obrađeno")); }

5.1. Nedostaje ovisnost

U slučaju nedostajanja ovisnosti, Spring baca a BeanCreationException s osnovnom iznimkom od NoSuchBeanDefinitionException. Pročitajte više o NoSuchBeanDefinitionException ovdje.

Na primjer, dummyFileProcessor grah ovisi o a dummyFileWriter grah. Od dummyFileWriter ne postoji, baca BeanCreationException:

@Test (očekuje se = NoSuchBeanDefinitionException.class) javna void kadaDependentBeanNotAvailable_ThrowsNosuchBeanDefinitionException () {context.getBean ("dummyFileProcessor"); }

5.2. Kružna ovisnost

Također, u ovom slučaju, baca BeanCreationException i ističe da grah ima kružnu ovisnost:

@Bean ("dummyFileProcessorCircular") @DependsOn ({"dummyFileReaderCircular"}) @ Lijeni javni FileProcessor dummyFileProcessorCircular () {vratiti novi FileProcessor (datoteka); }

Kružne ovisnosti mogu se dogoditi ako grah eventualno ovisi o sebi, stvaranje kruga:

Grah1 -> Grah4 -> Grah6 -> Grah1

6. Ključne točke

Napokon, postoji nekoliko točaka na koje bismo trebali voditi računa tijekom korištenja @Ovisi o napomena:

  • Dok se koristi @Ovisi o, moramo koristiti skeniranje komponenata
  • Ako je a Ovisi o-annotirana klasa se deklarira putem XML-a, Ovisi o metapodaci bilješki se zanemaruju

7. Zaključak

@Ovisi o postaje posebno korisno kada se grade sustavi sa složenim zahtjevima ovisnosti.

Olakšava ubrizgavanje ovisnosti, osiguravajući da će Spring provesti sve inicijalizacije potrebnih graha prije učitavanja naše ovisne klase.

Kao i uvijek, kod se može pronaći na GitHub-u.


$config[zx-auto] not found$config[zx-overlay] not found