..
Nu ska vi se, genom exempel hur man använder Injection Constructor Dependency
Vi skapar vår böna som är beroende av en generisk tjänst:
it.mrwebmaster.di.constructor paket;
public class Bean {
Privat GenericService genericService;
private String beanName;
/ **
* Tillverkare
* @ Param genericService
* @ Param beanName
* /
offentliga Bean (GenericService genericService, String beanName) {
super ();
this.genericService = genericService;
this.beanName = beanName;
}
/ **
* Offentlig metod
* /
public void doit () {
System.out.println (beanName + "göra något");
genericService.dosomething ();
}
}
konfigurera beroende 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>
Som framgår av exemplet att använda konstruktorn Dependency Injection måste använda taggen-arg konstruktor med ref eller attribut värde. Den ref Attibassi behöver passera som ARG redan initierats nell'IoC annan bönbehållaren, medan värdet attributet används för att passera standardvärden som strängar eller tal.
I exemplet klassen konstruktorn accepterar som indata en GenericService bönor och en sträng, men det exempel han ville kasta om ordningen av argument för att visa hur våren kombinera argument av deras typ.
Denna typ av beteende är bra när alla argument är av olika typer, men hur ska vi ange ordningen om argumenten är av samma typ?
Taggen-ARG konstruktör ger det index attribut som visar den ordning våren som man kan skicka parametrar.
<bean id="constructorBean" class="it.mrwebmaster.di.constructor.bean"> <constructor-arg value="beanName" index="1" /> <constructor-arg ref="genericService" index="0" /> </ Bean>
Ett annat fall kan vara ett tvetydigt en där construttore accepterar som indata två parametrar som både kan representeras av en sträng, till exempel:
offentliga Bean (GenericService genericService, String beanName, invocationTimes Integer) {
super ();
this.genericService = genericService;
this.beanName = beanName;
this.invocationTimes = invocationTimes;
}
och 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>I detta fall kan våren från fel som "0" vara antingen en sträng eller ett nummer. Du löser problemet genom att använda index eller attriburo typ attributet så här:
<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>
Attributet konstruktor-ARG kan också användas för att skicka parametrar till fabriken metoden:
public static bönor createBean (GenericService genericService, String beanName, invocationTimes Integer) {
Bean b = new Bean (genericService, beanName, invocationTimes);
/ / Gör somethig .......
avkastning 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 (kurs)
Komplett av öppen källkod-system. Från 49 €. |
| |
PHP (kurs)
Fullständig kurs för att skapa dynamiska webbplatser. Från 49 €. |
| |
Ruby och Ruby on Rails (kurs)
Skapa program och webbapplikationer med Ruby och RoR. Från 39 €. |