Dependency/Code Injection mit Google Guice!: Unterschied zwischen den Versionen
(Die Seite wurde neu angelegt: „Den Anfang macht das Bean. Angefangen mit dem Interface [code=java] package guicedemo; /** * Title: * * Description: * * Copyright: Copyright (c) 2009 *…“) |
|||
Zeile 1: | Zeile 1: | ||
Den Anfang macht das Bean. Angefangen mit dem Interface | Den Anfang macht das Bean. Angefangen mit dem Interface | ||
− | + | <code=java> | |
package guicedemo; | package guicedemo; | ||
Zeile 21: | Zeile 21: | ||
public void setValue(String key, String value); | public void setValue(String key, String value); | ||
} | } | ||
− | + | </code=java> | |
Hier die ConfigImpl: | Hier die ConfigImpl: | ||
− | + | <code=java> | |
package guicedemo; | package guicedemo; | ||
Zeile 59: | Zeile 59: | ||
} | } | ||
} | } | ||
− | + | </code=java> | |
+ | |||
+ | ReadController: | ||
+ | |||
+ | <code=java> | ||
+ | package guicedemo; | ||
+ | |||
+ | import com.google.inject.Inject; | ||
+ | |||
+ | /** | ||
+ | * Title: | ||
+ | * | ||
+ | * Description: | ||
+ | * | ||
+ | * Copyright: Copyright (c) 2009 | ||
+ | * | ||
+ | * Company: | ||
+ | * | ||
+ | * @author Taschek Joerg | ||
+ | * @version 1.0 | ||
+ | */ | ||
+ | public class ReadController | ||
+ | { | ||
+ | |||
+ | private Config conf; | ||
+ | |||
+ | @Inject | ||
+ | public ReadController(Config conf) | ||
+ | { | ||
+ | super(); | ||
+ | this.conf = conf; | ||
+ | } | ||
+ | |||
+ | public void printConfig() | ||
+ | { | ||
+ | System.out.println("Konfiguration: Test=" + this.conf.getValue("Test")); | ||
+ | } | ||
+ | } | ||
+ | </code=java> | ||
+ | |||
+ | Wie man hier sieht, hat man hier mehr keinen leeren (oder Standard) Konstruktor sondern einen mit dem Bean als Namen. Desweiteren ist das <code=inline>@Inject</code=inline> sehr wichtig (ohne dem funktioniert der ganze Zauber auch nicht). | ||
+ | |||
+ | WriteController: | ||
+ | |||
+ | <code=java> | ||
+ | package guicedemo; | ||
+ | |||
+ | import com.google.inject.Inject; | ||
+ | |||
+ | /** | ||
+ | * Title: | ||
+ | * | ||
+ | * Description: | ||
+ | * | ||
+ | * Copyright: Copyright (c) 2009 | ||
+ | * | ||
+ | * Company: | ||
+ | * | ||
+ | * @author Taschek Joerg | ||
+ | * @version 1.0 | ||
+ | */ | ||
+ | public class WriteController { | ||
+ | |||
+ | private Config conf; | ||
+ | |||
+ | @Inject | ||
+ | public WriteController(Config conf) { | ||
+ | super(); | ||
+ | this.conf = conf; | ||
+ | } | ||
+ | |||
+ | public void doConfig() { | ||
+ | this.conf.setValue("Test", "42"); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </code=java> | ||
+ | |||
+ | Auch hier hat man wieder einen '''Konstruktor''' mit dem Interface, sowie das <code=inline>'''@Inject'''</code=inline> nicht vergessen. | ||
+ | |||
+ | Bei Google Guice hat man '''keine XML Datei''', was angibt welches Interface wohingebunden wird. Stattdessen macht man das in einem '''Interface (Module)''' oder einer '''abstrakten Klasse (AbstractModule)'''. | ||
+ | |||
+ | Ich habe diese Konfiguration in meiner main Klasse gemacht. Indem sie von '''AbstractModule''' abgeleitet ist und die Methode '''configure''' überschreibt. Man könnte es auch über eine '''anonyme Klasse''' übergeben (so mache ich es im 2ten Bsp!). |
Version vom 25. Dezember 2013, 08:45 Uhr
Den Anfang macht das Bean. Angefangen mit dem Interface
<code=java> package guicedemo;
/**
* Title: * * Description: * * Copyright: Copyright (c) 2009 * * Company: * * @author Taschek Joerg * @version 1.0 */
public interface Config { public String getValue(String key);
public void setValue(String key, String value); } </code=java>
Hier die ConfigImpl:
<code=java> package guicedemo;
import java.util.Map; import java.util.HashMap;
/**
* Title: * * Description: * * Copyright: Copyright (c) 2009 * * Company: * * @author Taschek Joerg * @version 1.0 */
public class ConfingImpl implements Config {
private Map<String, String> prefs = new HashMap<String, String>();
public ConfingImpl() { super(); }
public String getValue(String key) { return this.prefs.get(key); }
public void setValue(String key, String value) { this.prefs.put(key, value); } } </code=java>
ReadController:
<code=java> package guicedemo;
import com.google.inject.Inject;
/**
* Title: * * Description: * * Copyright: Copyright (c) 2009 * * Company: * * @author Taschek Joerg * @version 1.0 */
public class ReadController {
private Config conf; @Inject public ReadController(Config conf) { super(); this.conf = conf; } public void printConfig() { System.out.println("Konfiguration: Test=" + this.conf.getValue("Test")); }
} </code=java>
Wie man hier sieht, hat man hier mehr keinen leeren (oder Standard) Konstruktor sondern einen mit dem Bean als Namen. Desweiteren ist das <code=inline>@Inject</code=inline> sehr wichtig (ohne dem funktioniert der ganze Zauber auch nicht).
WriteController:
<code=java> package guicedemo;
import com.google.inject.Inject;
/**
* Title: * * Description: * * Copyright: Copyright (c) 2009 * * Company: * * @author Taschek Joerg * @version 1.0 */
public class WriteController {
private Config conf;
@Inject public WriteController(Config conf) { super(); this.conf = conf; }
public void doConfig() { this.conf.setValue("Test", "42"); }
} </code=java>
Auch hier hat man wieder einen Konstruktor mit dem Interface, sowie das <code=inline>@Inject</code=inline> nicht vergessen.
Bei Google Guice hat man keine XML Datei, was angibt welches Interface wohingebunden wird. Stattdessen macht man das in einem Interface (Module) oder einer abstrakten Klasse (AbstractModule).
Ich habe diese Konfiguration in meiner main Klasse gemacht. Indem sie von AbstractModule abgeleitet ist und die Methode configure überschreibt. Man könnte es auch über eine anonyme Klasse übergeben (so mache ich es im 2ten Bsp!).