..
Nyní se podívejme na příkladech, jak použít konstruktor Dependency Injection
Vytváříme naši bobů, který závisí na generické služby:
it.mrwebmaster.di.constructor balení;
{public class Bean
Soukromé GenericService genericService;
private String beanName;
/ **
* Výrobce
* @ Param genericService
* @ Param beanName
* /
veřejné Bean (GenericService genericService, String beanName) {
super ();
this.genericService = genericService;
this.beanName = beanName;
}
/ **
* Veřejná metoda
* /
public void doit () {
System.out.println (beanName + "něco");
genericService.dosomething ();
}
}
Konfigurace závislostí nell'applicationContext. XML
<bean id="genericService" class="it.mrwebmaster.di.constructor.GenericServiceImpl" scope="singleton" /> <bean id="constructorBean" class="it.mrwebmaster.di.constructor.bean"> <constructor-arg value="beanName"/> <constructor-arg ref="genericService"/> </ Bean>
Jak je vidět například použít konstruktor Dependency Injection je nutné použít tag-arg pomocí konstruktoru REF, nebo hodnoty atributů. Odkaz Attibassi třeba předat jako argument již instance nell'IoC další nádoby fazole, zatímco hodnota atributu je použita předat výchozí hodnoty jako řetězce nebo čísla.
V příkladu třídy konstruktor přijímá jako vstup GenericService fazole a String, ale například chtěl obrátit pořadí argumenty, které ukazují, jak jaro kombinuje argumenty podle jejich typu.
Tento typ chování je v pořádku, když všechny argumenty jsou různých typů, ale jak jsme se určit pořadí, v případě, že argumenty jsou stejného typu?
Tag-arg konstruktér poskytuje index atribut, který určuje pořadí na jaře, které jim předat parametry.
<bean id="constructorBean" class="it.mrwebmaster.di.constructor.bean"> <constructor-arg value="beanName" index="1" /> <constructor-arg ref="genericService" index="0" /> </ Bean>
Dalším případem může být dvojznačný, v němž construttore akceptuje jako vstup dva parametry, které mohou být zastoupeny oba řetězce, například:
veřejné Bean (GenericService genericService, String beanName, invocationTimes Integer) {
super ();
this.genericService = genericService;
this.beanName = beanName;
this.invocationTimes = invocationTimes;
}
a nell'applicationContext. XML
<bean id="constructorBean2" class="it.mrwebmaster.di.constructor.bean"> <constructor-arg value="0" /> <constructor-arg value="beanName" /> <constructor-arg ref="genericService" /> </ Bean>V tomto případě může pramenit z chyby jako "0" být buď řetězec nebo číslo. Chcete-li tento problém vyřešit, použijte index, nebo attriburo typ atributu, jako je tento:
<bean id="constructorBean2" class="it.mrwebmaster.di.constructor.bean"> <constructor-arg type="java.lang.Integer" value="0" /> <constructor-arg value="beanName" type="java.lang.String" /> <constructor-arg ref="genericService" /> </ Bean>
Atribut konstruktér-arg může být také použit k předání parametrů do továrního metody:
public static fazole createBean (GenericService genericService, String beanName, invocationTimes Integer) {
Bean Bean b = new (genericService, beanName, invocationTimes);
/ / Do somethig .......
návrat b;
}
nell'applicationContext. XML
<bean id="constructorBean3" class="it.mrwebmaster.di.constructor.bean" factory-method="createBean"> <constructor-arg type="java.lang.Integer" value="0" /> <constructor-arg value="beanName" type="java.lang.String" /> <constructor-arg ref="genericService" /> </ Bean>
| |
Linux (kurz)
Kompletní průvodce pro open-source systému. Od 49 €. |
| |
PHP (kurz)
Celý kurz pro vytváření dynamických webů. Od 49 €. |
| |
Ruby a Ruby on Rails (kurz)
Vytvořit software a webových aplikací s Ruby a RoR. Od 39 €. |