טען משאב כמחרוזת באביב

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

במדריך זה נבחן דרכים שונות הזריק את תוכן המשאב המכיל טקסט כמחרוזת לפולי האביב שלנו.

נבחן איתור המשאב וקריאת תוכנו.

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

2. שימוש מַשׁאָב

אנו יכולים לפשט את איתור קובץ המשאבים באמצעות מַשׁאָב מִמְשָׁק. אביב עוזר לנו למצוא ולקרוא משאב באמצעות מטעין המשאבים, המחליט איזה מַשׁאָב יישום לבחירה בהתאם לנתיב הניתן. ה מַשׁאָב היא למעשה דרך לגשת לתוכן המשאב, ולא לתוכן עצמו.

בואו נראה כמה דרכים לרכוש א מַשׁאָב למשל למשאבים בשביל הכיתה.

2.1. באמצעות ResourceLoader

אנחנו יכולים להשתמש בכיתה ResourceLoader אם אנו מעדיפים להשתמש בטעינה עצלה:

ResourceLoader resourceLoader = DefaultResourceLoader חדש (); משאב משאבים = resourceLoader.getResource ("classpath: resource.txt");

אנחנו יכולים גם להזריק את ResourceLoader לתוך השעועית שלנו עם @Autowired:

@ ResourceLoader פרטיAutowired resourceLoader;

2.2 שימוש @מַשׁאָב

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

@Value ("classpath: resource.txt") משאב משאבים פרטי;

3. המרה מ מַשׁאָב ל חוּט

ברגע שיש לנו גישה ל- מַשׁאָב עלינו להיות מסוגלים לקרוא אותו לא חוּט. בואו ניצור ResourceReader כיתת שירות בשיטה סטטית asString לעשות זאת עבורנו.

ראשית, עלינו לרכוש InputStream:

InputStream inputStream = resource.getInputStream ();

הצעד הבא שלנו הוא לקחת את זה InputStream ולהמיר אותו לא חוּט. אנחנו יכולים להשתמש בזה של אביב FileCopyUtils # copyToString שיטה:

מחלקה ציבורית ResourceReader {מחרוזת סטטית ציבורית asString (משאב משאבים) {נסה (קורא קורא = InputStreamReader חדש (resource.getInputStream (), UTF_8)) {החזור FileCopyUtils.copyToString (קורא); } לתפוס (IOException e) {לזרוק UncheckedIOException חדש (e); }} // שיטות שירות נוספות}

ישנן דרכים רבות אחרות להשיג זאת, למשל באמצעות copyToString של האביב StreamUtils מעמד

בואו גם ליצור שיטת שירות נוספת readFileToString, שיאחזר את מַשׁאָב בשביל, וקרא ל asString שיטה להמיר אותו ל- חוּט.

מחרוזת סטטית ציבורית readFileToString (נתיב מחרוזת) {ResourceLoader resourceLoader = חדש DefaultResourceLoader (); משאב משאבים = resourceLoader.getResource (נתיב); החזר asString (משאב); }

4. הוספת א תְצוּרָה מעמד

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

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

@Configuration מחלקה ציבורית LoadResourceConfig {// הצהרות שעועית}

4.1. שימוש בשעועית המחזיקה במחרוזת המשאבים

בואו נכריז על שעועית להחזיק את תוכן המשאב ב- @תְצוּרָה מעמד:

@Bean מחרוזת ציבורית ResourceString () {להחזיר ResourceReader.readFileToString ("resource.txt"); }

בואו כעת נזריק את השעועית הרשומה לשדות על ידי הוספת @Autowired ביאור:

מחלקה ציבורית LoadResourceAsStringIntegrationTest {פרטית סופית מחרוזת מחרוזת EXPECTED_RESOURCE_VALUE = "..."; // ערך המחרוזת של תוכן הקובץ @Autowired @Qualifier ("resourceString") פרטי מחרוזת resourceString; @Test ציבורי בטל givenUsingResourceStringBean_whenConvertingAResourceToAString_thenCorrect () {assertEquals (EXPECTED_RESOURCE_VALUE, resourceString); }}

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

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

5. שימוש ב- SpEL

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

בואו נשתמש ב- @ערך ביאור להזרקת תוכן הקובץ לשדה resourceStringUsingSpel:

מחלקה ציבורית LoadResourceAsStringIntegrationTest {סופי סטטי פרטי מחרוזת EXPECTED_RESOURCE_VALUE = "..."; // ערך המחרוזת של תוכן הקובץ @Value ("# {T (com.baeldung.loadresourceasstring.ResourceReader) .readFileToString ('classpath: resource.txt')}") private String resourceStringUsingSpel private; @Test הציבור בטל givenUsingSpel_whenConvertingAResourceToAString_thenCorrect () {assertEquals (EXPECTED_RESOURCE_VALUE, resourceStringUsingSpel); }}

הנה קראנו ResourceReader # readFileToString המתאר את מיקום הקובץ באמצעות "מסלול כיתה:" -נתיב קידומת בתוך שלנו @ערך ביאור.

כדי להפחית את כמות הקוד ב- SpEL, יצרנו שיטת עוזר בכיתה ResourceReader המשתמשת באפצ'י קומונס FileUtils כדי לגשת לקובץ מהנתיב שסופק:

class class ResourceReader {public Stic String readFileToString (String path) זורק IOException {return FileUtils.readFileToString (ResourceUtils.getFile (path), StandardCharsets.UTF_8); }}

6. מסקנה

במדריך זה סקרנו כמה מהדרכים להמיר משאב ל- חוּט.

קודם כל ראינו איך לייצר a מַשׁאָב כדי לגשת לקובץ וכיצד לקרוא ממנו מַשׁאָב ל חוּט.

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

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

כמו תמיד, ניתן למצוא את הקוד לדוגמאות ב- GitHub


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