Töltsön be erőforrást stringként tavasszal

1. Áttekintés

Ebben az oktatóanyagban különböző módszereket vizsgálunk meg egy szöveget tartalmazó karakterláncot tartalmazó forrás tartalmát injektálja a tavaszi babunkba.

Megvizsgáljuk az erőforrás helyét és annak tartalmát.

Ezenkívül bemutatjuk, hogyan lehet megosztani a betöltött erőforrásokat több babon. Ezt a függőség-injektáláshoz kapcsolódó kommentárok segítségével mutatjuk be, bár ugyanez elérhető az XML-alapú injekció használatával és a bab deklarálásával az XML tulajdonságfájlban.

2. Használata Forrás

Egyszerűsíthetjük az erőforrásfájl keresését a Forrás felület. A tavasz segít nekünk megtalálni és elolvasni egy erőforrást az erőforrás-betöltővel, amely eldönti, hogy melyik Forrás a megvalósítást választani a rendelkezésre álló úttól függően. A Forrás valójában az erőforrás tartalmához való hozzáférés módja, nem pedig maga a tartalom.

Nézzük meg a megszerzésének néhány módját Forrás például az osztályúton lévő erőforrásokhoz.

2.1. Használata ResourceLoader

Használhatjuk az osztályt ResourceLoader ha inkább lusta rakodást használunk:

ResourceLoader resourceLoader = new DefaultResourceLoader (); Erőforrás-erőforrás = resourceLoader.getResource ("classpath: resource.txt");

Injektálhatjuk a ResourceLoader a babunkba @Autowired:

@Autowired private ResourceLoader resourceLoader;

2.2 Használata @Forrás

Injektálhatunk a Forrás közvetlenül tavaszi babba @Érték:

@Value ("classpath: resource.txt") privát erőforrás-erőforrás;

3. Konvertálás innen Forrás nak nek Húr

Miután hozzáférünk a Forrás tudnunk kell olvasni a Húr. Hozzunk létre egy ResourceReader hasznossági osztály statikus módszerrel asString hogy ezt megtegye helyettünk.

Először is meg kell szereznünk egy InputStream:

InputStream inputStream = resource.getInputStream ();

A következő lépésünk ennek megtétele InputStream és konvertálja a-ra Húr. Használhatjuk Spring sajátját FileCopyUtils # copyToString módszer:

public class ResourceReader {public static String asString (erőforrás-erőforrás) {try (Reader olvasó = új InputStreamReader (erőforrás.getInputStream (), UTF_8)) {return FileCopyUtils.copyToString (olvasó); } catch (IOException e) {dobja be az új UncheckedIOException (e) -t; }} // további segédprogramok}

Ennek elérésére számos más módszer létezik, például felhasználás copyToString tavaszi StreamUtils osztály

Hozzunk létre egy másik segédprogram-módszert is readFileToString, amely be fogja szerezni a Forrás utat, és hívja a asString módszer a Húr.

public static String readFileToString (karakterlánc útvonala) {ResourceLoader resourceLoader = új DefaultResourceLoader (); Erőforrás-erőforrás = resourceLoader.getResource (elérési út); return asString (erőforrás); }

4. A hozzáadása Konfiguráció Osztály

Ha minden babnak erőforrást kellene beadnia Húrs egyenként megvan az esély mind a kód duplikációjára, mind pedig a memória fokozottabb felhasználására annak a babnak, amelynek saját egyedi példánya van Húr.

Rendesebb megoldást érhetünk el, ha az erőforrás tartalmát egy vagy több tavaszi babba injektáljuk az alkalmazás kontextusának betöltésekor. Ily módon elrejthetjük az erőforrás beolvasásának megvalósítási részleteit a különféle babok elől, amelyeknek ezt a tartalmat használniuk kell.

@Configuration public class LoadResourceConfig {// Bean Declarations}

4.1. Az erőforrás-karakterláncot tartó bab használata

Kijelentjük, hogy a bab tartalmazza az erőforrás tartalmát egy @ Konfiguráció osztály:

@Bean public String resourceString () {return ResourceReader.readFileToString ("resource.txt"); }

Injektáljuk most a regisztrált babot a mezőkhöz egy an hozzáadásával @Autowired kommentár:

public class LoadResourceAsStringIntegrationTest {private static final String EXPECTED_RESOURCE_VALUE = "..."; // A @Autowired @Qualifier ("resourceString") private String fájl karakterláncának értéke stringSourceString; @Test public void givenUsingResourceStringBean_whenConvertingAResourceToAString_thenCorrect () {assertEquals (EXPECTED_RESOURCE_VALUE, resourceString); }}

Ebben az esetben a @ Minősítő kommentár és a bab neve, mint előfordulhat, hogy több azonos típusú mezőt kell beadnunkHúr.

Meg kell jegyeznünk, hogy a minősítőben használt babnév annak a metódusnak a nevéből származik, amely létrehozza a babot a konfigurációs osztályban.

5. A SpEL használata

Végül nézzük meg, hogyan használhatjuk a Spring Expression nyelvet az erőforrásfájl közvetlenül az osztályunk mezőjébe történő betöltéséhez szükséges kód leírására.

Használjuk a @Érték annotáció a fájl tartalmának a mezőbe történő befecskendezéséhez resourceStringUsingSpel:

public class LoadResourceAsStringIntegrationTest {private static final String EXPECTED_RESOURCE_VALUE = "..."; // A @Value ("# {T (com.baeldung.loadresourceasstring.ResourceReader) .readFileToString ('classpath: resource.txt')}") fájl karakterlánc-értéke private String resourceStringUsingSpel; @Test public void givenUsingSpel_whenConvertingAResourceToAString_thenCorrect () {assertEquals (EXPECTED_RESOURCE_VALUE, resourceStringUsingSpel); }}

Itt hívtuk ResourceReader # readFileToString a fájl helyének leírása a használatával „Osztályút:” -előtagú utat belül @Érték annotáció.

A SpEL kódjának csökkentése érdekében létrehoztunk egy segítő módszert az osztályban ResourceReader amely az Apache Commons-t használja FileUtils a fájl eléréséhez a megadott elérési útvonalról:

public class ResourceReader {public static String readFileToString (String path) dobja az IOException {return FileUtils.readFileToString (ResourceUtils.getFile (elérési út), StandardCharsets.UTF_8); }}

6. Következtetés

Ebben az oktatóanyagban áttekintettünk néhány módot erőforrás konvertálása a-ra Húr.

Először is láttuk, hogyan lehet előállítani a Forrás hogy hozzáférjen a fájlhoz, és hogyan olvasson el onnan Forrás nak nek Húr.

Ezután azt is bemutattuk, hogyan lehet elrejteni az erőforrás-betöltési megvalósítást, és megengedjük, hogy a karakterlánc tartalma megossza a babokat azáltal, hogy minősített babokat hoz létre egy @ Konfiguráció, lehetővé téve a húrok automatikus bekötését.

Végül a SpEL-t használtuk, amely kompakt és azonnali megoldást nyújt, bár egyedi segítő funkcióra volt szükség ahhoz, hogy ne váljon túl bonyolulttá.

Mint mindig, a példák kódja a GitHub oldalon található