מדריך מהיר למעיין האביב @ Lazy

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

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

עם זאת, ישנם מקרים בהם עלינו ליצור שעועית, לא בעת ההפעלה של הקשר היישום, אלא כאשר אנו מבקשים זאת.

במדריך מהיר זה, נדבר על האביב @עָצֵל ביאור.

2. אתחול עצלן

ה @עָצֵל הערה קיימת מאז אביב גרסה 3.0. ישנן מספר דרכים לומר למיכל ה- IoC לאתחל שעועית בעצלתיים.

2.1. @תְצוּרָה מעמד

כשאנחנו שמים @עָצֵל ביאור על @תְצוּרָה בכיתה, זה מציין כי כל השיטות עם @אפונה יש לטעון את ההערה בעצלתיים.

זה המקבילה לתצורות מבוססות XML ברירת מחדל- lazy-init ="נָכוֹן תְכוּנָה.

בואו נסתכל כאן:

@Lazy @Configuration @ComponentScan (basePackages = "com.baeldung.lazy") AppConfig {@Bean אזור ציבורי getRegion () {להחזיר אזור חדש (); } @Bean מדינה ציבורית getCountry () {להחזיר מדינה חדשה (); }}

בואו נבדוק כעת את הפונקציונליות:

@Test הציבור בטל givenLazyAnnotation_whenConfigClass_thenLazyAll () {AnnotationConfigApplicationContext ctx = חדש AnnotationConfigApplicationContext (); ctx.register (AppConfig.class); ctx.refresh (); ctx.getBean (Region.class); ctx.getBean (Country.class); }

כפי שאנו רואים, כל השעועית נוצרת רק כשאנחנו מבקשים אותה בפעם הראשונה:

מפעל שעועית ל ... AnnotationConfigApplicationContext: ... DefaultListableBeanFactory: [...]; // הקשר היישום התחיל שעועית אזורית מאותחל

כדי להחיל זאת רק על שעועית מסוימת, בואו נסיר את @עָצֵל משיעור.

ואז נוסיף אותו לתצורה של השעועית הרצויה:

@Bean @Lazy (אמת) ציבורי אזור getRegion () {להחזיר אזור חדש (); }

2.2 עם @Autowired

לפני שתמשיך, עיין במדריכים הבאים עבור @Autowired ו @רְכִיב ביאורים.

פה, על מנת לאתחל שעועית עצלה, אנו מתייחסים אליה מאחרת.

השעועית שאנחנו רוצים להעמיס בעצלתיים:

@Lazy @ Component class class עיר {עיר ציבורית () {System.out.println ("שעועית עיר מאותחל"); }}

וזה התייחסות:

מעמד ציבורי אזור {@Lazy @ עיר פרטית עירונית אוטומטית; אזור ציבורי () {System.out.println ("שעועית אזורית מאותחל"); } getCityInstance () עיר ציבורית (return city); }}

שים לב, כי @עָצֵל חובה בשני המקומות.

עם ה @רְכִיב ביאור על עִיר בכיתה ותוך כדי הפניה אליו עם @Autowired:

@Test הציבור בטל givenLazyAnnotation_whenAutowire_thenLazyBean () {// לטעון את ההקשר יישום ctx אזור אזור = ctx.getBean (Region.class); region.getCityInstance (); }

פה, ה עִיר שעועית מאותחל רק כשאנחנו קוראים getCityInstance () שיטה.

3. מסקנה

במדריך מהיר זה למדנו את היסודות של אביב @עָצֵל ביאור. בדקנו כמה דרכים להגדיר ולהשתמש בה.

כרגיל, הקוד השלם עבור מדריך זה זמין באתר GitHub.


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