..
La oss nå se, ved eksempel, hvordan du bruker Constructor Dependency Injection
Vi skaper vår bean som er avhengig av en generisk tjeneste:
it.mrwebmaster.di.constructor pakke;
public class Bean {
Private GenericService genericService;
private String beanName;
/ **
* Constructor
* @ Param genericService
* @ Param beanName
* /
public Bean (GenericService genericService, String beanName) {
super ();
this.genericService = genericService;
this.beanName = beanName;
}
/ **
* Public metode
* /
public void DOiT () {
System.out.println (beanName + "gjøre noe");
genericService.dosomething ();
}
}
konfigurere avhengighet 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 fremgår av eksempelet til å bruke Constructor Dependency Injection vi må bruke koden-arg konstruktør med ref attributt eller verdi. Den ref Attibassi behovet for å passere som arg annen bønne allerede instansiert nell'IoC container, mens verdien attributtet brukes til å passere standardverdiene som strenger eller tall.
I eksempel bean klassen konstruktør godtar som input en GenericService og en streng, men eksempelet han ønsket å snu rekkefølgen av argumenter å vise hvordan Spring knytte argumentene av typen deres.
Denne typen atferd er fint når alle argumenter er av forskjellige typer, men hvordan spesifiserer vi ordren hvis argumentene er de samme type?
Koden-arg konstruktør gir indeksen attributt som angir rekkefølgen Spring med å sende parameterne.
<bean id="constructorBean" class="it.mrwebmaster.di.constructor.bean"> <constructor-arg value="beanName" index="1" /> <constructor-arg ref="genericService" index="0" /> </ Bean>
Et annet tilfelle kan være tvetydig når construttore godtar som input to parametere som både kan bli representert av en streng, for eksempel:
public 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 tilfellet, kan våren fra feil som "0" enten være en streng eller et nummer. For å løse dette problemet kan du bruke indeksen eller attriburo type attributt på denne måten:
<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>
Attributtet konstruktør-arg kan også brukes til å sende parametre til fabrikken metoden:
public static bean createBean (GenericService genericService, String beanName, invocationTimes Integer) {
Bean b = new Bean (genericService, beanName, invocationTimes);
/ / Må somethig .......
tilbake 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 (Course)
Komplett guide til open-source system. Starter fra 49 €. |
| |
PHP (Course)
Full kurs for å lage dynamiske nettsider. Starter fra 49 €. |
| |
Ruby og Ruby On Rails (Course)
Opprette programvare og web applikasjoner med Ruby og RoR. Starter fra 39 €. |