שליטה בסדר יצירת שעועית עם הערה @DependsOn

1. סקירה כללית

אביב, כברירת מחדל, מנהל את מחזור החיים של שעועית ומסדר את סדר האתחול שלהם.

אבל, אנחנו עדיין יכולים להתאים אותו בהתאם לצרכים שלנו. אנחנו יכולים לבחור את ה- SmartLifeCycle ממשק או @תלוי ב ביאור לניהול צו אתחול.

הדרכה זו בוחנת את @תלוי ב ביאור והתנהגותו במקרה של שעועית חסרה או תלות מעגלית. או במקרה של פשוט צורך שעועית אחת מאותחל לפני אחרת.

2. מייבן

קודם כל, בואו נייבא תלות בהקשר האביבי שלנו pom.xml קוֹבֶץ. עלינו תמיד להתייחס ל- Maven Central לקבלת הגרסה האחרונה של תלות:

 org.springframework spring-context 5.2.8.RELEASE 

3. @תלוי ב

עלינו להשתמש בהערה זו לצורך ציון תלות שעועית. אביב מבטיח כי את השעועית המוגדרת יאתחל לפני שתנסה לאתחל את השעועית הנוכחית.

בוא נגיד שיש לנו a מעבד קבצים שתלוי בא FileReader ו FileWriter. במקרה הזה, FileReader ו FileWriter צריך לאתחל לפני מעבד קבצים.

4. תצורה

קובץ התצורה הוא מחלקה טהורה של Java @תְצוּרָה ביאור:

@Configuration @ComponentScan ("com.baeldung.dependson") מחלקה ציבורית Config {@Bean @DependsOn ({"fileReader", "fileWriter"}) fileProcessor fileProcessor () של הציבור (להחזיר FileProcessor חדש (); } @Bean ("fileReader") FileReader fileReader () {להחזיר FileReader חדש (); } @Bean ("fileWriter") FileWriter ציבורי FileWriter () {להחזיר FileWriter חדש (); }}

מעבד קבצים מציין את התלות שלו עם @תלוי ב. אנו יכולים גם להוסיף הערות א רְכִיב עם @תלוי ב:

@Component @ DependsOn ({"filereader", "fileWriter"}) FileProcessor {} בכיתה ציבורית

5. שימוש

בואו ניצור כיתה אחת קוֹבֶץ. כל אחד מהשעועית מעדכן את הטקסט בתוכו קוֹבֶץ. FileReader מעדכן אותו כנקרא. FileWriter מעדכן אותו ככתיבה ו מעבד קבצים מעדכן את הטקסט כמעובד:

@Test ציבורי בטל WhenFileProcessorIsCreated_FileTextContains_Processed () {מעבד FileProcessor = context.getBean (FileProcessor.class); assertTrue (processor.process (). endsWith ("מעובד")); }

5.1. חסר תלות

במקרה של תלות חסרה, אביב זורק א BeanCreationException למעט בסיס של NoSuchBeanDefinitionException. קרא עוד אודות NoSuchBeanDefinitionException פה.

לדוגמה, dummyFileProcessor שעועית תלויה ב- dummyFileWriter אפונה. מאז dummyFileWriter לא קיים, זה זורק BeanCreationException:

@Test (צפוי = NoSuchBeanDefinitionException.class) בטל פומבי כאשר DepependentBeanNotAvailable_ThrowsNosuchBeanDefinitionException () {context.getBean ("dummyFileProcessor"); }

5.2. תלות מעגלית

כמו כן, במקרה זה, זה זורק BeanCreationException ומדגיש כי לשעועית יש תלות מעגלית:

@Bean ("dummyFileProcessorCircular") @DependsOn ({"dummyFileReaderCircular"}) @Lazy FileProcessor ציבורי dummyFileProcessorCircular () {להחזיר FileProcessor חדש (קובץ); }

תלות מעגלית יכולה לקרות אם לשעועית יש תלות בסופו של דבר בעצמה, יצירת מעגל:

שעועית 1 -> שעועית 4 -> שעועית 6 -> שעועית 1

6. נקודות מפתח

לבסוף, יש כמה נקודות שעלינו לטפל בהן בעת ​​השימוש בהן @תלוי ב ביאור:

  • תוך כדי שימוש @תלוי ב, עלינו להשתמש בסריקת רכיבים
  • אם תלוי ב- מחלקה מסומנת מוכרזת באמצעות XML, תלוי ב לא מתעלמים ממטא נתונים של הערה

7. מסקנה

@תלוי ב הופך להיות שימושי במיוחד בבניית מערכות עם דרישות תלות מורכבות.

זה מקל על הזרקת התלות, ומבטיח שאביב יטפל בכל האתחול של שעועית נדרשת לפני טעינת הכיתה התלוייה שלנו.

כמו תמיד, ניתן למצוא את הקוד ב- GitHub.


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