..
Lad os nu se, ved sit eksempel, hvordan man bruger Constructor Dependency Injection
Vi skaber vores bønner, der afhænger af en generisk tjeneste:
it.mrwebmaster.di.constructor pakke;
public class Bean {
Privat GenericService genericService;
private String beanName;
/ **
* Producent
* @ Param genericService
* @ Param beanName
* /
offentlige Bean (GenericService genericService, String beanName) {
super ();
this.genericService = genericService;
this.beanName = beanName;
}
/ **
* Offentlig metode
* /
public void doit () {
System.out.println (beanName + "gøre noget");
genericService.dosomething ();
}
}
konfigurere afhængighed 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 det kan ses fra eksemplet til at bruge Constructor Dependency Injection skal bruge tag-ARG konstruktør med ref eller værdi attributter. Den ref Attibassi behov for at lade som arg allerede instantieres nell'IoC anden bønne beholder, mens værdien attribut bruges til at videregive standardværdier som strenge eller tal.
I eksemplet klassens constructor accepterer som input en GenericService bønner og en streng, men det eksempel, han ønskede at bytte om på rækkefølgen af argumenter at vise, hvordan foråret kombinere argumenter ved deres type.
Denne type adfærd er fint, når alle argumenter er af forskellige typer, men hvordan kan vi angive den rækkefølge, hvis argumenterne er de samme type?
Den tag-arg konstruktør giver indekset attribut, der angiver den rækkefølge, i foråret med til at passere parametre.
<bean id="constructorBean" class="it.mrwebmaster.di.constructor.bean"> <constructor-arg value="beanName" index="1" /> <constructor-arg ref="genericService" index="0" /> </ Bean>
Et andet tilfælde kan være et tvetydigt, i hvilket den construttore accepterer som input to parametre, der både kan være repræsenteret af en streng, for eksempel:
offentlige Bean (GenericService genericService, String beanName, invocationTimes Integer) {
super ();
this.genericService = genericService;
this.beanName = beanName;
this.invocationTimes = invocationTimes;
}
og 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 dette tilfælde kan udspringe af fejlen som "0" være enten en streng eller et tal. For at løse dette problem ved at bruge indekset, eller attriburo den type attribut sådan her:
<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>
Attributten konstruktør-arg kan også bruges til at overføre parametre til fabrikken metode:
public static Bean createBean (GenericService genericService, String beanName, invocationTimes Integer) {
Bean b = ny Bean (genericService, beanName, invocationTimes);
/ / Gør somethig .......
tilbage 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 (Kursus)
Komplet guide til open source-system. Fra 49 €. |
| |
PHP (Kursus)
Fuld kursus for at skabe dynamiske web-sites. Fra 49 €. |
| |
Ruby og Ruby on Rails (Kursus)
Opret software og web-applikationer med Ruby og RoR. Fra 39 €. |