Tavaszi bab létrehozása gyári módszerekkel

1. Bemutatkozás

A gyári módszerek hasznos technikák lehetnek az összetett létrehozási logika elrejtésére egyetlen metódushíváson belül.

Míg általában babot készítünk tavasszal konstruktor vagy terepi injektálás segítségével, készíthetünk tavaszi babot is gyári módszerekkel.

Ebben az oktatóanyagban elmélyülünk a Spring bab készítésében mind példányos, mind statikus gyári módszerekkel.

2. Példánygyári módszer

A gyári metódus szokásos megvalósítása egy olyan példány metódus létrehozása, amely visszaadja a kívánt babot.

Ezenkívül úgy konfigurálhatjuk Spring-et, hogy argumentumokkal vagy anélkül hozza létre a kívánt babot.

2.1. Érvek nélkül

Hozhatunk létre a Foo osztály, amely a létrehozott babunkat képviseli:

nyilvános osztály Foo {}

Ezután létrehozunk egy PéldányFooFactory osztály, amely magában foglalja a gyári módszert, createInstance, ez hozza létre a mi Foo bab:

public class instanceFooFactory {public Foo createInstance () {return new Foo (); }}

Ezt követően konfiguráljuk a tavaszt:

  1. Hozzon létre egy babot a gyári osztályunkhoz (PéldányFooFactory)
  2. Használja a gyár-bab attribútum a gyári babunk hivatkozására
  3. Használja a gyári módszer attribútum a gyári módszerünk hivatkozására (createInstance)

Ezt egy Spring XML-konfigurációra alkalmazva a következőket állítjuk elő:

Végül automatikusan beküldjük a kívánságunkat Foo bab. A tavasz majd létrehozza a babunkat a mi felhasználásával createInstance gyári módszer:

@RunWith (SpringJUnit4ClassRunner.class) @ContextConfiguration ("/ factorymethod / instance-config.xml") public class instanceFooFactoryIntegrationTest {@Autowired private Foo foo; @Test public void givenValidInstanceFactoryConfig_whenCreateFooInstance_thenInstanceIsNotNull () {assertNotNull (foo); }}

2.2. Érvekkel

A példánygyári módszerünkhöz is argumentumokat adhatunk a konstruktor-arg elem tavaszi konfigurációnkban.

Először létrehozunk egy osztályt, Rúd, amely argumentumot használ:

public class Bar {private String name; nyilvános sáv (karakterlánc neve) {this.name = név; } // ... getterek és beállítók}

Ezután létrehozunk egy példánygyári osztályt, PéldányBárFaktor, gyári módszerrel, amely elfogad egy argumentumot és visszaadja a Rúd bab:

public class instanceBarFactory {public Bar createInstance (String name) {return new Bar (name); }}

Végül hozzátesszük a konstruktor-arg elem a mi Rúd bab definíció:

Ezután automatikusan beírhatjuk a sajátunkat Rúd babot ugyanúgy, mint a sajátunk számára Foo bab:

@RunWith (SpringJUnit4ClassRunner.class) @ContextConfiguration ("/ factorymethod / instance-bar-config.xml") public class instanceBarFactoryIntegrationTest {@Autowired private Bar instance; @Test public void givenValidInstanceFactoryConfig_whenCreateInstance_thenNameIsCorrect () {assertNotNull (instance); assertEquals ("someName", instance.getName ()); }}

3. Statikus gyári módszer

Azt is beállíthatjuk, hogy a Spring statikus módszert használjon gyári módszerként.

Míg a példánygyári módszereket kell előnyben részesíteni, ez a technika hasznos lehet, ha léteznek olyan meglévő, régi statikus módszereink, amelyek előállítják a kívánt babot. Például, ha egy gyári módszer szingulettet ad vissza, akkor konfigurálhatjuk Spring-et ennek a szingleton gyári metódusnak a használatára.

A példánygyári metódusokhoz hasonlóan statikus módszereket is beállíthatunk argumentumokkal és argumentumok nélkül.

3.1. Érvek nélkül

A mi felhasználásával Foo osztály, mint a kívánt bab, létrehozhatunk egy osztályt, SingletonFooFactory, amely magában foglalja a createInstance gyári módszer, amely visszaadja a Foo:

nyilvános osztály SingletonFooFactory {privát statikus döntő Foo INSTANCE = új Foo (); public static Foo createInstance () {return INSTANCE; }}

Ezúttal, csak egy babot kell létrehoznunk. Ehhez a babhoz csak két attribútum szükséges:

  1. osztály - kijelenti gyári osztályunkat (SingletonFooFactory)
  2. gyári módszer - deklarálja a statikus gyári módszert (createInstance)

Ezt alkalmazva a tavaszi XML konfigurációnkra a következőket kapjuk:

Végül pedig automatikusan beküldjük a sajátunkat Foo bab ugyanazzal a szerkezettel, mint korábban:

@RunWith (SpringJUnit4ClassRunner.class) @ContextConfiguration ("/ factorymethod / static-foo-config.xml") public class SingletonFooFactoryIntegrationTest {@Autowired private Foo singleton; @Test public void givenValidStaticFactoryConfig_whenCreateInstance_thenInstanceIsNotNull () {assertNotNull (singleton); }}

3.2. Érvekkel

Míg kerülni kell a statikus objektumok állapotának megváltoztatását - mint például a szingliként -, amikor lehetséges, akkor is átadhatunk érveket a statikus gyári módszerünknek.

Ehhez létrehozunk egy új gyári módszert, amely elfogadja a kívánt érveket:

nyilvános osztály SingletonBarFactory {privát statikus döntősáv INSTANCE = új sáv ("névtelen"); nyilvános statikus sáv createInstance (karakterlánc neve) {INSTANCE.setName (név); visszatérés INSTANCE; }}

Ezt követően úgy konfiguráljuk a Spring-et, hogy adja meg a kívánt argumentumot a konstruktor-arg elem:

Végül pedig automatikusan beküldjük a sajátunkat Rúd bab ugyanazzal a szerkezettel, mint korábban:

@RunWith (SpringJUnit4ClassRunner.class) @ContextConfiguration ("/ factorymethod / static-bar-config.xml") public class SingletonBarFactoryIntegrationTest {@Autowired private Bar instance; @Test public void givenValidStaticFactoryConfig_whenCreateInstance_thenNameIsCorrect () {assertNotNull (instance); assertEquals ("someName", instance.getName ()); }}

4. Következtetés

Ebben a cikkben megvizsgáltuk, hogyan konfigurálhatjuk a Spring-et példány- és statikus gyári módszerek használatára - argumentumokkal és argumentumok nélkül is.

Míg a bab létrehozása konstruktorral és terepi injekcióval gyakoribb, a gyári módszerek hasznosak lehetnek a komplex létrehozási lépések és a régi kódok számára.

A cikkben használt kód megtalálható a GitHub oldalon.