מדריך מהיר לאביב @ Value

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

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

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

2. הגדרת היישום

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

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

בואו נגדיר את קובץ המאפיינים:

value.from.file = הערך קיבל מהעדיפות של הקובץ = high listOfValues ​​= A, B, C.

3. דוגמאות לשימוש

כדוגמה בסיסית ובעיקר חסרת תועלת, אנו יכולים רק להזריק "ערך מחרוזת" מההערה לשדה:

@Value ("ערך מחרוזת") פרטי מחרוזת stringValue;

משתמש ב @PropertySource ביאור מאפשר לנו לעבוד עם ערכים מקבצי מאפיינים עם ה- @ערך ביאור.

בדוגמה הבאה, אנו מקבלים הערך קיבל מהקובץ מוקצה לשדה:

@Value ("$ {value.from.file}") valueFromFile פרטי מחרוזת;

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

נניח שהגדרנו מאפיין מערכת בשם systemValue:

@Value ("$ {systemValue}") מערכת מחרוזת פרטית systemValue;

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

@Value ("$ {unknown.param: some default}") פרטי מחרוזת someDefault;

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

נניח שהיה לנו נכס עדיפות מוגדר כמאפיין מערכת עם הערך מאפיין מערכת והוגדר כמשהו אחר בקובץ המאפיינים. הערך יהיה מאפיין מערכת:

@Value ("$ {עדיפות}") מחרוזת פרטית prioritSystemProperty;

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

בחלק הראשון הגדרנו ערכים המופרדים בפסיקים ב- listOfValues של קובץ המאפיינים, כך שערכי המערך יהיו ["א ב ג"]:

@Value ("$ {listOfValues}") פרטי מחרוזת [] valuesArray;

4. דוגמאות מתקדמות עם SpEL

אנו יכולים גם להשתמש בביטויי SpEL כדי לקבל את הערך.

אם יש לנו מאפיין מערכת בשם עדיפות, אז הערך שלו יוחל על השדה:

@Value ("# {systemProperties ['עדיפות']}") פרטי מחרוזת spelValue;

אם לא הגדרנו את מאפיין המערכת, אז ריק ערך יוקצה.

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

@Value ("# {systemProperties ['unknown']?: 'Some default'}") פרטי מחרוזת spelSomeDefault;

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

@Value ("# {someBean.someValue}") מספר שלם פרטי someBeanValue;

אנחנו יכולים לתפעל מאפיינים כדי להשיג רשימה של ערכים, כאן, רשימה של ערכי מחרוזות A, B ו- C:

@Value ("# {'$ {listOfValues}'. Split (',')}") פרטי רשימת ערכים רשימה;

5. שימוש @ערך עם מפות

אנחנו יכולים גם להשתמש ב- @ערך ביאור להזרקת א מַפָּה תכונה.

ראשית, נצטרך להגדיר את המאפיין ב- {ערך מפתח' } טופס בקובץ המאפיינים שלנו:

valuesMap = {key1: '1', key2: '2', key3: '3'}

שים לב שהערכים ב מַפָּה חייב להיות במרכאות בודדות.

כעת אנו יכולים להזרים ערך זה מקובץ המאפיינים כ- מַפָּה:

@Value ("# {$ {valuesMap}}") Map map map פרטי;

אם אנחנו צריכים כדי לקבל את הערך של מפתח ספציפי בתוך ה מַפָּה, כל שעלינו לעשות הוא הוסף את שם המפתח בביטוי:

@Value ("# {$ {valuesMap} .key1}") ערכים שלמים פרטיים שלם MapKey1;

אם אנחנו לא בטוחים אם מַפָּה מכיל מפתח מסוים, עלינו לבחור ביטוי בטוח יותר שלא יזרוק חריג אלא יקבע את הערך ל- ריק כאשר המפתח לא נמצא:

@Value ("# {$ {valuesMap} ['unknownKey']}") מספר שלם פרטי unknownMapKey;

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

@Value ("# {$ {unknownMap: {key1: '1', key2: '2'}}") מפה פרטית unknownMap; @Value ("# {$ {valuesMap} ['unknownKey']?: 5}") מספר שלם פרטי unknownMapKeyWithDefaultValue;

מַפָּה ניתן לסנן ערכים לפני ההזרקה.

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

@Value ("# {$ {valuesMap}.? [Value> '1']}") ערכי מפה פרטיים MapFiltered;

אנחנו יכולים גם להשתמש ב- @ערך ביאור ל הזריק את כל מאפייני המערכת הנוכחיים:

@Value ("# {systemProperties}") מערכת מפת פרטיPropertiesMap;

6. שימוש @ערך עם הזרקת קונסטרוקטור

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

בואו נראה את זה בפועל:

@Component @PropertySource ("classpath: values.properties") מחלקה ציבורית PriorityProvider {עדיפות מחרוזת פרטית; @ PriorityProvider ציבורי אוטומטי (@Value ("$ {עדיפות: רגיל}") עדיפות מחרוזת) {this.priority = עדיפות; } // גטר סטנדרטי}

בדוגמה שלעיל אנו מזריקים a עדיפות ישירות לתוך שלנו ספק עדיפותבונה.

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

7. שימוש @ערך עם הזרקת סתר

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

בואו נסתכל:

@Component @PropertySource ("classpath: values.properties") מחלקה ציבורית CollectionProvider {private list values ​​= new ArrayList (); @Value בטל ציבורי אוטומטי (@Value ("# {'$ {listOfValues}'. Split (',')}") ערכי רשימה) {this.values.addAll (ערכים); } // גטר סטנדרטי}

אנו משתמשים בביטוי SpEL כדי להזרים רשימת ערכים ל- setValues שיטה.

8. מסקנה

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

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