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.