ההבדל בין @ComponentScan ו- @EnableAutoConfiguration באתחול האביב

1. הקדמה

במדריך מהיר זה נלמד על ההבדלים בין @ComponentScan ו @EnableAutoConfiguration ביאורים במסגרת האביב.

2. הערות אביב

ביאורים מקלים על התצורה של הזרקת התלות באביב. במקום להשתמש בקבצי תצורה של XML, אנו יכולים להשתמש בהערות Spring Bean על מחלקות ושיטות להגדרת שעועית. לאחר מכן, מיכל ה- IoC של Spring מגדיר ומנהל את השעועית.

הנה סקירה כללית של ההערות שעומדים לדון במאמר זה:

  • @ComponentScan סורק אחר רכיבי קפיץ המבוארים
  • @EnableAutoConfiguration משמש להפעלת התצורה האוטומטית

בואו נבדוק כעת את ההבדל בין שתי ההערות הללו.

3. איך הם נבדלים

ההבדל העיקרי בין ההערות הללו הוא בכך @ComponentScan סורק אחר רכיבי אביב בזמן @EnableAutoConfiguration משמש לתצורה אוטומטית של שעועית הקיימת בכיתה ביישומי Spring Boot.

עכשיו, בואו נעבור עליהם בפירוט רב יותר.

3.1. @ComponentScan

בעת פיתוח אפליקציה, עלינו לומר למסגרת האביב לחפש רכיבים המנוהלים על ידי אביב. @ComponentScan מאפשר ל- Spring לחפש דברים כמו תצורות, בקרים, שירותים ורכיבים אחרים שאנו מגדירים.

בפרט, ה @ComponentScanהערה משמשת עם @תְצוּרָה ביאור כדי לציין את החבילה לאביב לסרוק רכיבים:

@Configuration @ComponentScan מחלקה ציבורית EmployeeApplication {public static void main (String [] args) {ApplicationContext context = SpringApplication.run (EmployeeApplication.class, args); // ...}}

לחלופין, Spring יכול גם להתחיל בסריקה מהחבילה שצוינה, אותה נוכל להגדיר באמצעות basePackageClasses () אוֹ basePackages (). אם לא צוינה שום חבילה, היא שוקלת את החבילה של המחלקה המצהירה על @ComponentScan ביאור כחבילה ההתחלתית:

חבילה com.baeldung.annotations.componentscanautoconfigure; // ... @Configuration @ComponentScan (basePackages = {"com.baeldung.annotations.componentscanautoconfigure.healthcare", "com.baeldung.annotations.componentscanautoconfigure.employee"}, basePackageClasses = מורה.קלאס) מעמד ציבורי שכבה ציבורית void main (String [] args) {ApplicationContext context = SpringApplication.run (EmployeeApplication.class, args); // ...}}

בדוגמה, אביב יסרוק את בריאות ו עוֹבֵד חבילות ו מוֹרֶה מחלקה לרכיבים.

Spring מחפש בחבילות שצוינו יחד עם כל חבילות המשנה שלה אחר שיעורים עם הערות @תְצוּרָה. בנוסף, ה תְצוּרָה שיעורים יכולים להכיל @אפונה ביאורים, שרושמים את השיטות כשעועית בהקשר של יישום האביב. לאחר מכן, ה- @ComponentScan ביאור יכול לזהות אוטומטית שעועית כזו:

@Configuration בית חולים ציבורי {@Bean רופא ציבורי getDoctor () {להחזיר רופא חדש (); }}

יתר על כן, ה- @ComponentScan ביאור יכול גם לסרוק, לזהות ולרשום שעועית לשיעורים עם הערות @Component, @Controller, @Service, ו מאגר @.

לדוגמא, אנו יכולים ליצור עוֹבֵד class כמרכיב שניתן לסרוק על ידי @ComponentScan ביאור:

שכיר ציבורי @Component ("עובד") {// ...}

3.2. @EnableAutoConfiguration

ה @EnableAutoConfiguration ביאור מאפשר לאתחול האביב להגדיר אוטומטית את הקשר של היישום. לכן, היא יוצרת ורושמת באופן אוטומטי שעועית בהתבסס על קבצי הצנצנת הכלולים שבכיתה ועל השעועית שהגדרנו על ידינו.

לדוגמא, כאשר אנו מגדירים את קפיץ-אתחול-רשת תלות בנתיב הכיתות שלנו, מגף האביב מגדיר אוטומטית את Tomcat ו- MVC של האביב. עם זאת, לתצורה האוטומטית הזו יש פחות עדיפות במקרה שאנחנו מגדירים את התצורות שלנו.

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

@Configuration @EnableAutoConfiguration public class EmployeeApplication {public static void main (String [] args) {ApplicationContext context = SpringApplication.run (EmployeeApplication.class, args); // ...}}

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

אנחנו יכולים להשתמש לא לכלול כדי להשבית את רשימת הכיתות שאיננו רוצים להגדיר אוטומטית:

@Configuration @EnableAutoConfiguration (exclude = {JdbcTemplateAutoConfiguration.class}) Class public EmployeeApplication {public static void main (String [] args) {ApplicationContext context = SpringApplication.run (EmployeeApplication.class, args); // ...}}

אנחנו יכולים להשתמש excludeName להגדרת רשימה מוסמכת לחלוטין של שמות כיתות שאנו רוצים לכלול מהתצורה האוטומטית:

@Configuration @EnableAutoConfiguration (excludeName = {"org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration"}) שכבה ציבורית EmployeeApplication {main public static void (String [] args) {ApplicationContext context = SpringApplication.run (EmployeeApplication. Argument ); // ...}}

מאז Spring Boot 1.2.0, אנו יכולים להשתמש ב- @ SpringBootApplication ביאור, שהוא שילוב של שלוש ההערות @Configuration, @EnableAutoConfiguration, ו@ComponentScan עם תכונות ברירת המחדל שלהם:

@SpringBootApplication מחלקה ציבורית EmployeeApplication {public static void main (String [] args) {ApplicationContext context = SpringApplication.run (EmployeeApplication.class, args); // ...}}

4. מסקנה

במאמר זה למדנו על ההבדלים בין @ComponentScan ו @EnableAutoConfiguration באביב המגף.

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


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