A babkészítési sorrend ellenőrzése a @DependsOn kommentárral

1. Áttekintés

A tavasz alapértelmezés szerint kezeli a bab életciklusát és gondoskodik az inicializálási sorrendről.

De még mindig testre szabhatjuk igényeink alapján. Választhatjuk a SmartLifeCycle interfész vagy a @Attól függ kommentár az inicializálási sorrend kezeléséhez.

Ez az oktatóanyag a @Attól függ annotáció és viselkedése hiányzó bab- vagy körfüggőség esetén. Vagy abban az esetben, ha egyszerűen csak egy babot kell inicializálni a másik előtt.

2. Maven

Először is importáljuk a tavaszi kontextus függőségét pom.xml fájl. A függőségek legfrissebb verzióját mindig a Maven Central oldalára kell keresnünk:

 org.springframework tavaszi kontextus 5.2.8.KÖZLEMÉNY 

3. @Attól függ

Ezt a feliratot a babfüggőségek meghatározásához kell használnunk. A tavasz garantálja, hogy a meghatározott babot inicializálják, mielőtt megkísérelnék a jelenlegi bab inicializálását.

Tegyük fel, hogy van egy FileProcessor ami függ a FileReader és FileWriter. Ebben az esetben, FileReader és FileWriter előtt kell inicializálni FileProcessor.

4. Konfiguráció

A konfigurációs fájl egy tiszta Java osztály @ Konfiguráció kommentár:

@Configuration @ComponentScan ("com.baeldung.dependson") public class Config {@Bean @DependsOn ({"fileReader", "fileWriter"}) public FileProcessor fileProcessor () {return new FileProcessor (); } @Bean ("fileReader") public FileReader fileReader () {return new FileReader (); } @Bean ("fileWriter") public FileWriter fileWriter () {return new FileWriter (); }}

FileProcessor függőségeit azzal határozza meg @Attól függ. Megjegyezhetjük a Összetevő val vel @Attól függ:

@Component @DependsOn ({"filereader", "fileWriter"}) nyilvános osztály FileProcessor {}

5. Használat

Hozzunk létre egy osztályt File. A bab minden egyes része frissíti a szöveget File. FileReader frissíti olvasottként. FileWriter frissíti írási és FileProcessor feldolgozott szövegként frissíti a szöveget:

@Test public void WhenFileProcessorIsCreated_FileTextContains_Processed () {FileProcessor processzor = context.getBean (FileProcessor.class); assertTrue (processzor.process (). végeWith ("feldolgozott")); }

5.1. Hiányzik a függőség

Hiányzó függőség esetén Spring a BeanCreationException bázis kivételével NoSuchBeanDefinitionException. További információ erről NoSuchBeanDefinitionException itt.

Például, dummyFileProcessor bab függ a dummyFileWriter bab. Mivel dummyFileWriter nem létezik, dob BeanCreationException:

@Test (várható = NoSuchBeanDefinitionException.class) public void whenDependentBeanNotAvailable_ThrowsNosuchBeanDefinitionException () {context.getBean ("dummyFileProcessor"); }

5.2. Körfüggőség

Továbbá, ebben az esetben dob BeanCreationException és kiemeli, hogy a bab körkörösen függ:

@Bean ("dummyFileProcessorCircular") @DependsOn ({"dummyFileReaderCircular"}) @Lazy public FileProcessor dummyFileProcessorCircular () {return new FileProcessor (file); }

Körkörös függőségek akkor fordulhatnak elő, ha a bab végül függ önmagától, kör létrehozása:

Bab1 -> Bab4 -> Bab6 -> Bab1

6. Fő szempontok

Végül, van néhány olyan pont, amelyekre ügyelnünk kell a használat során @Attól függ kommentár:

  • Használat közben @Attól függ, komponens-szkennelést kell használnunk
  • Ha egy Attól függ-jegyzetlen osztályt deklaráljuk XML-en keresztül, Attól függ a kommentár metaadatait figyelmen kívül hagyják

7. Következtetés

@Attól függ különösen hasznos lesz komplex függőségi követelményekkel rendelkező rendszerek kiépítésekor.

Ez megkönnyíti a függőség injekcióját, biztosítva, hogy Spring a szükséges bab összes inicializálását elvégezze, mielőtt a függő osztályunkat betöltenénk.

Mint mindig, a kód megtalálható a GitHubon.