מבוא ל- Spring ClassPathXmlApplicationContext

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

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

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

ApplicationContext הוא ממשק ב org.springframework.context החבילה ויש לו כמה יישומים, ואת ClassPathXmlApplicationContext הוא אחד מאלה.

במאמר זה נתמקד בפונקציות שימושיות המסופקות על ידי ClassPathXmlApplicationContext.

2. שימוש בסיסי

2.1. אתחל מיכל ונהל שעועית

ClassPathXmlApplicationContext יכול לטעון תצורת XML ממסלול כיתה ולנהל את השעועית שלה:

יש לנו סטוּדֶנט מעמד:

סטודנט בכיתה ציבורית {int int private; שם מחרוזת פרטי; // קונסטרוקציות סטנדרטיות, קבוצות וקובעות}

אנו מגדירים א סטוּדֶנט שעועית פנימה classpathxmlapplicationcontext-example.xml והוסף אותו לשביל כיתה:

עכשיו אנחנו יכולים להשתמש ב- ClassPathXmlApplicationContext כדי לטעון את תצורת ה- XML ​​ולקבל את ה- סטוּדֶנט אפונה:

@Test הריקני מבחן testBasicUsage () {ApplicationContext context = new ClassPathXmlApplicationContext ("classpathxmlapplicationcontext-example.xml"); סטודנט סטודנט = (סטודנט) context.getBean ("סטודנט"); assertThat (student.getNo (), equalTo (15)); assertThat (student.getName (), equalTo ("טום")); סטודנט sameStudent = context.getBean ("סטודנט", Student.class); assertThat (sameStudent.getNo (), equalTo (15)); assertThat (sameStudent.getName (), equalTo ("טום")); }

2.2. תצורות XML מרובות

לפעמים אנו רוצים להשתמש בכמה תצורות XML כדי לאתחל מיכל קפיצי. במקרה זה, עלינו פשוט להוסיף מספר מיקומי תצורה בעת בניית ה- ApplicationContext:

ApplicationContext context = חדש ClassPathXmlApplicationContext ("ctx.xml", "ctx2.xml");

3. יכולות נוספות

3.1. כבה את מיכל ה- IoC האביב בחן

כאשר אנו משתמשים במיכל ה- IOC של Spring ביישום אינטרנט, Spring מבוסס האינטרנט ApplicationContext יישומים ישביתו את המכולה בחינניות כאשר היישום ייסגר, אך אם אנו משתמשים בו בסביבה שאינה אינטרנט, כגון יישום שולחן עבודה עצמאי, עלינו לרשום לבד וו כיבוי ב- JVM בכדי לוודא שהאביב מיכל ה- IoC נסגר בחן וקורא לשיטות ההרס לשחרר משאבים.

בואו נוסיף a להרוס() שיטה ל סטוּדֶנט מעמד:

חלל ריק להשמיד () {System.out.println ("התלמיד (לא:" + לא + ") נהרס"); }

כעת אנו יכולים להגדיר שיטה זו כ- סטוּדֶנט שיטת השמדה של שעועית:

כעת נרשום וו כיבוי:

@Test מבטל הריק ציבורי RegisterShutdownHook () {ConfigurableApplicationContext context = new ClassPathXmlApplicationContext ("classpathxmlapplicationcontext-example.xml"); context.registerShutdownHook (); }

כאשר אנו מריצים את שיטת הבדיקה, אנו יכולים לראות את להרוס() שיטה נקראת.

3.2. בינלאומי עם MessageSource

ה ApplicationContext ממשק מרחיב את MessageSource ממשק, ולכן מספק פונקציונליות בינלאומית.

An ApplicationContext מיכל מחפש אוטומטית a MessageSource שעועית באתחול שלה, והשעועית חייבת להיקרא בשם messageSource.

הנה דוגמה לשימוש בשפות שונות עם MessageSource:

ראשית, בואו נוסיף a שיח לספריית מסלול ולהוסיף שני קבצים לספריית הדו-שיח: dialog_en. נכסים ו dialog_zh_CN. נכסים.

dialog_en. נכסים:

שלום = שלום לך = תודה = תודה {0}

dialog_zh_CN. נכסים:

שלום = \ u4f60 \ u597d you = \ u4f60 תודה = \ u8c22 \ u8c22 {0}

הגדר את messageSource שעועית פנימה classpathxmlapplicationcontext-internationalization.xml:

    שיח / דו שיח 

לאחר מכן, בואו נקבל מילות דו-שיח בשפות שונות עם MessageSource:

@Test מבטל הריק של הציבור @Internationalization () {משאבי MessageSource = ClassPathXmlApplicationContext חדש ("classpathxmlapplicationcontext-internationalization.xml"); מחרוזת enHello = resources.getMessage ("שלום", null, "ברירת מחדל", אזור.אנגלית); מחרוזת enYou = resources.getMessage ("אתה", null, Locale.ENGLISH); מחרוזת enThanks = resources.getMessage ("תודה", אובייקט חדש [] {enYou}, Locale.ENGLISH); assertThat (enHello, equalTo ("שלום")); assertThat (enThanks, equalTo ("תודה")); מחרוזת chHello = resources.getMessage ("שלום", null, "ברירת מחדל", אזור.SIMPLIFIED_CHINESE); מחרוזת chYou = resources.getMessage ("אתה", null, אזור.SIMPLIFIED_CHINESE); מחרוזת chThanks = resources.getMessage ("תודה", אובייקט חדש [] {chYou}, Local.SIMPLIFIED_CHINESE); assertThat (chHello, equalTo ("你好")); assertThat (chThanks, equalTo ("谢谢 你")); }

4. התייחסות ל ApplicationContext

לפעמים אנחנו צריכים להשיג את ההתייחסות של ApplicationContext בתוך השעועית המנוהלת על ידיה, אנו יכולים להשתמש בה ApplicationContextAware אוֹ @Autowired כדי לעשות זאת. בואו נראה כיצד משתמשים ApplicationContextAware עובד:

יש לנו קוּרס כיתה עם שם:

קורס בכיתה ציבורית {שם מחרוזת פרטי; // קונסטרוקציות סטנדרטיות, קבוצות וקובעות}

יש לנו מוֹרֶה כיתה המרכיבה את המסלולים שלה לפי שעועית המיכל:

מורה בכיתה ציבורית מיישם ApplicationContextAware {הקשר ApplicationContext פרטי; קורסי רשימה פרטית = ArrayList חדש (); @ Override public void setApplicationContext (ApplicationContext applicationContext) זורק BeansException {this.context = applicationContext; } @ PostConstruct בטל ציבורי addCourse () {if (context.containsBean ("מתמטיקה")) {קורס מתמטיקה = context.getBean ("מתמטיקה", Course.class); קורסים. להוסיף (מתמטיקה); } אם (context.containsBean ("פיזיקה")) {קורס פיזיקה = context.getBean ("פיזיקה", קורס.קלאס); קורסים. להוסיף (פיזיקה); }} // בונים סטנדרטיים, גטרים וקובעים}

בואו להגדיר את קוּרס שעועית ו מוֹרֶה שעועית פנימה classpathxmlapplicationcontext-example.xml:

ואז - בדוק את הזרקת ה- קורסים תכונה:

@Test מבטל חלל ציבוריApplicationContextAware () {ApplicationContext context = new ClassPathXmlApplicationContext ("classpathxmlapplicationcontext-example.xml"); מורה למורה = context.getBean ("מורה", מורה.קלאס); רשימת קורסים = מורה. GetCourses (); assertThat (courses.size (), equalTo (1)); assertThat (courses.get (0) .getName (), equalTo ("מתמטיקה")); }

מלבד יישום ה- ApplicationContextAware ממשק, באמצעות @Autowired להערה אותה השפעה.

בואו נשנה את מוֹרֶה בכיתה לזה:

מורה בכיתה ציבורית {@ הקשר פרטי ב- ApplicationContext פרטי; קורסי רשימה פרטית = ArrayList חדש (); @ PostConstruct בטל פומבי addCourse () {if (context.containsBean ("מתמטיקה")) {קורס מתמטיקה = context.getBean ("מתמטיקה", Course.class); קורסים. להוסיף (מתמטיקה); } אם (context.containsBean ("פיזיקה")) {קורס פיזיקה = context.getBean ("פיזיקה", קורס.קלאס); קורסים. להוסיף (פיזיקה); }} // בונים סטנדרטיים, גטרים וקובעים}

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

5. מסקנה

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

אז במאמר זה, הצגנו כמה היבטים של ה- ClassPathXmlApplicationContext, כולל השימוש הבסיסי בו, פונקציונליות רישום הכיבוי שלו, פונקציונליות הבינלאומיות והשגת התייחסות אליו.

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


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