יישום הקשר האביבי

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

במדריך זה נבחן את האביב ApplicationConext ממשק בפירוט.

2. ה ApplicationContext מִמְשָׁק

אחד המאפיינים העיקריים של מסגרת האביב הוא מיכל ה- IoC (Inversion of Control). מיכל ה- IOC של Spring אחראי על ניהול אובייקטים של יישום. הוא משתמש בהזרקת תלות כדי להשיג היפוך שליטה.

הממשקים BeanFactory ו ApplicationContext מייצגים את מיכל ה- IOC של אביב. פה, BeanFactory הוא ממשק הבסיס לגישה למיכל האביב. הוא מספק פונקציות בסיסיות לניהול שעועית.

מצד שני, ה ApplicationContext הוא ממשק משנה של ה- BeanFactory. לפיכך, הוא מציע את כל הפונקציות של BeanFactory.

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

3. מהי שעועית אביבית?

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

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

על פי תיעוד האביב, באופן כללי, עלינו להגדיר שעועית לאובייקטים של שכבת שירות, אובייקטים לגישה לנתונים (DAO), אובייקטים של מצגות, אובייקטים תשתיתיים כגון Hibernate מפעלים Session, תורי JMS וכן הלאה.

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

אז בואו נגדיר שיעור Java פשוט בו נשתמש כשעועית אביב במדריך זה:

שירות בכיתה ציבורית AccountService {@ חשבון פרטי פרטי מאגר חשבון מאגר; // גטרים וקובעים}

4. הגדרת שעועית במיכל

כידוע, התפקיד העיקרי של ApplicationContext זה לנהל שעועית.

לכן, יישום חייב לספק את תצורת השעועית ל ApplicationContext מְכוֹלָה. לכן, תצורת שעועית אביב מורכבת מהגדרות שעועית אחת או יותר. כמו כן, אביב תומך בדרכים שונות להגדרת תצורה של שעועית.

4.1. תצורה מבוססת Java

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

תצורת Java בדרך כלל משתמשת @אפונה-שיטות המוענקות בתוך a @תְצוּרָה מעמד. ה @אפונה ביאור על שיטה מציין שהשיטה יוצרת שעועית אביבית. יתר על כן, כיתה עם הערות עם @תְצוּרָה מציין שהוא מכיל תצורות של שעועית אביב.

אז בואו ניצור מחלקת תצורה להגדרת שלנו שירות חשבון שיעור כשעועית אביבית:

@Configuration מחלקה ציבורית AccountConfig {@Bean AccountService הציבורי accountService () {להחזיר AccountService חדש (accountRepository ()); } @Bean AccountRepository accountRepository () {להחזיר AccountRepository חדש (); }}

4.2. תצורה מבוססת ביאורים

אביב 2.5 הציג תצורה מבוססת ביאור כצעד הראשון לאפשר תצורות שעועית בג'אווה.

בגישה זו אנו מפעילים תחילה תצורה מבוססת ביאור באמצעות תצורת XML. לאחר מכן, אנו משתמשים בקבוצת הערות בשיעורי Java, בשיטות, בבונים או בשדות שלנו כדי להגדיר שעועית. כמה דוגמאות להערות אלה הן @רְכִיב, @בקר, @שֵׁרוּת, מאגר @, @Autowired, ו @מַגְדִיר.

יש לציין כי אנו משתמשים גם בהערות אלה בתצורה מבוססת Java. כמו כן, אביב ממשיך להוסיף יכולות נוספות להערות אלה בכל מהדורה.

אז, בואו נראה דוגמה פשוטה לתצורה זו.

ראשית, ניצור את תצורת ה- XML, user-bean-config.xml, כדי לאפשר ביאורים:

פה, ה ביאור-תצורה תג מאפשר מיפוי מבוסס הערות. וגם ה סריקת רכיבים תג אומר לאביב היכן לחפש שיעורים המבוארים.

שנית, ניצור את שירות משתמש ולהגדיר אותה כשעועית אביבית באמצעות @רְכִיב ביאור:

@Component Public Class UserService {// קוד שירות משתמשים}

ואז נכתוב מקרה מבחן פשוט לבדיקת תצורה זו:

ApplicationContext context = חדש ClassPathXmlApplicationContext ("applicationcontext / user-bean-config.xml"); UserService userService = context.getBean (UserService.class); assertNotNull (userService);

4.3. תצורה מבוססת XML

לבסוף, בואו נסתכל על תצורה מבוססת XML. זו הדרך המסורתית להגדיר שעועית באביב.

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

אז בואו ניצור קובץ תצורה של XML, חשבון-שעועית-config.xmlולהגדיר שעועית עבור שלנו שירות חשבון מעמד:

5. סוגי ApplicationContext

האביב מספק סוגים שונים של ApplicationContext מיכלים המתאימים לדרישות שונות. אלה יישומים של ApplicationContext מִמְשָׁק. אז בואו נסתכל על כמה מהסוגים הנפוצים של ApplicationContext.

5.1. AnnotationConfigApplicationContext

ראשית, בוא נראה את AnnotationConfigApplicationContext בכיתה, שהוצגה באביב 3.0. זה יכול לקחת שיעורים עם הערות עם @תְצוּרָה, @רְכִיב, ומטא נתונים JSR-330 כקלט.

אז בואו נראה דוגמה פשוטה לשימוש ב- AnnotationConfigApplicationContext מיכל עם התצורה מבוססת Java שלנו:

ApplicationContext context = AnnotationConfigApplicationContext חדש (AccountConfig.class); AccountService accountService = context.getBean (AccountService.class);

5.2. AnnotationConfigWebApplicationContext

AnnotationConfigWebApplicationContextהוא גרסה מבוססת רשת שֶׁל AnnotationConfigApplicationContext.

אנו עשויים להשתמש בכיתה זו כאשר אנו מגדירים את האביב ContextLoaderListener מאזין סרוולט או MVC באביב DispatcherServlet, ב web.xml קוֹבֶץ.

יתר על כן, החל מאביב 3.0 ואילך, אנו יכולים גם להגדיר את מיכל ההקשר של היישום בתכנות. כל שעלינו לעשות הוא ליישם את WebApplicationInitializer מִמְשָׁק:

מחלקה ציבורית MyWebApplicationInitializer מיישם את WebApplicationInitializer {public void onStartup (ServletContext container) זורק את ServletException {AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext (); context.register (AccountConfig.class); context.setServletContext (מיכל); // תצורת servlet}}

5.3. XmlWebApplicationContext

אם אנו משתמשים ב- תצורה מבוססת XML ביישום אינטרנט, אנחנו יכולים להשתמש ב- XmlWebApplicationContext מעמד.

למען האמת, הגדרת תצורה של מיכל זה היא כמו AnnotationConfigWebApplicationContext בכיתה בלבד, מה שאומר שנוכל להגדיר אותה ב web.xml או ליישם את WebApplicationInitializer מִמְשָׁק:

מחלקה ציבורית MyXmlWebApplicationInitializer מיישם את WebApplicationInitializer {public void onStartup (מיכל ServletContext) זורק ServletException {XmlWebApplicationContext context = new XmlWebApplicationContext (); context.setConfigLocation ("/ WEB-INF / spring / applicationContext.xml"); context.setServletContext (מיכל); // תצורת Servlet}}

5.4. FileSystemXMLApplicationContext

אנו משתמשים ב- FileSystemXMLApplicationContext כיתה ל טען קובץ תצורה של Spring מבוסס XML ממערכת הקבצים או מכתובות אתרים. מחלקה זו שימושית כשאנחנו צריכים לטעון את ה- ApplicationContext מבחינה תכנתית. באופן כללי, רתמות בדיקה ויישומים עצמאיים הם חלק ממקרי השימוש האפשריים לכך.

לדוגמה, בואו נראה כיצד נוכל ליצור מיכל אביב זה ונטען את השעועית לתצורה מבוססת ה- XML ​​שלנו:

נתיב מחרוזת = "C: /myProject/src/main/resources/applicationcontext/account-bean-config.xml"; ApplicationContext context = FileSystemXmlApplicationContext חדש (נתיב); AccountService accountService = context.getBean ("accountService", AccountService.class);

5.5. ClassPathXmlApplicationContext

למקרה שנרצה טען קובץ תצורה של XML ממסלול הכיתה, אנחנו יכולים להשתמש ב- ClassPathXmlApplicationContext מעמד. דומה ל FileSystemXMLApplicationContext, זה שימושי לרתמות בדיקה כמו גם להקשרים של יישומים המוטמעים ב- JAR.

אז בואו נראה דוגמה לשימוש בכיתה זו:

ApplicationContext context = חדש ClassPathXmlApplicationContext ("applicationcontext / account-bean-config.xml"); AccountService accountService = context.getBean ("accountService", AccountService.class);

6. תכונות נוספות של ApplicationContext

6.1. פתרון הודעות

ה ApplicationContext מִמְשָׁק תומך ברזולוציית הודעות ובינלאומי על ידי הרחבת ה- MessageSource מִמְשָׁק. יתר על כן, אביב מספק שניים MessageSource יישומים, ResourceBundleMessageSource ו StaticMessageSource.

אנחנו יכולים להשתמש ב- StaticMessageSource כדי להוסיף תכנותית הודעות למקור. עם זאת, הוא תומך בינלאומי בסיסי ומתאים יותר לבדיקות מאשר לשימוש בייצור.

מצד שני, ResourceBundleMessageSource הוא היישום הנפוץ ביותר של MessageSource. זה מסתמך על JDK הבסיסי ResouceBundle יישום. הוא גם משתמש בניתוח ההודעות הסטנדרטי של ה- JDK שמספק MessageFormat.

עכשיו, בואו נראה איך נוכל להשתמש ב- MessageSource לקריאת ההודעות מקובץ מאפיינים.

ראשית, ניצור את messages.properties קובץ בשביל הכיתה:

account.name = TestAccount

שנית, נוסיף הגדרת שעועית במילה שלנו AccountConfig מעמד:

@Bean MessageSource ציבורי messageSource () {ResourceBundleMessageSource messageSource = חדש ResourceBundleMessageSource (); messageSource.setBasename ("config / messages"); return messageSource; }

שלישית, נזריק את MessageSource בתוך ה שירות חשבון:

@Autowired פרטי MessageSource messageSource;

לבסוף, אנו יכולים להשתמש ב- getMessage שיטה בכל מקום ב שירות חשבון לקריאת ההודעה:

messageSource.getMessage ("account.name", null, Locale.ENGLISH);

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

6.2. טיפול באירועים

ApplicationContext תומך בטיפול באירועים בעזרת ה- ApplicationEvent הכיתה וה יישום מאזין מִמְשָׁק. הוא תומך באירועים מובנים כמו ContextStartedEvent, ContextStoppedEvent, ContextClosedEvent, ו RequestHandledEvent. יתר על כן, הוא תומך גם באירועים מותאמים אישית למקרי שימוש עסקי.

7. מסקנה

במדריך זה דנו בהיבטים שונים של ה- ApplicationContext מיכל באביב. ראינו דוגמאות שונות כיצד להגדיר שעועית אביב בתבנית AppicationContext. כמו כן, ראינו כיצד ליצור ולהשתמש בסוגים שונים של ApplicationContext.

כמו תמיד, הקוד השלם זמין ב- GitHub.


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