..
Tagad pieņemsim redzēt, ar piemēriem, kā izmantot konstruktoru Dependency Injection
Mēs veidojam mūsu pupiņas, kas atkarīga no vispārējo pakalpojumu:
it.mrwebmaster.di.constructor paketi;
valsts klases Bean {
Private GenericService genericService;
privātā String beanName;
/ **
* Konstruktors
* @ Param genericService
* @ Param beanName
* /
valsts Bean (GenericService genericService, String beanName) {
super ();
this.genericService = genericService;
this.beanName = beanName;
}
/ **
* Valsts metode
* /
valsts spēkā nieciņš () {
System.out.println (beanName + "kaut ko dara");
genericService.dosomething ();
}
}
konfigurēt atkarība 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"/> </ Pupiņu>
Kā var redzēt no piemēra izmantot konstruktora Dependency Injection mums ir izmantot tag-arg konstruktors izmantojot ref atribūtu vai vērtību. Ref Attibassi nepieciešams iziet kā arg citu pupiņu jau instantiated nell'IoC konteiners, bet vērtība atribūtu izmanto, lai iet noklusējuma vērtības kā virknes vai ciparus.
Šajā piemērā pupu klases konstruktors pieņem kā ievade GenericService un String, bet piemēram, viņš vēlējās, lai mainītu secību argumentus, lai pierādītu, cik pavasara asociētais argumentus, to veida.
Šis uzvedības veids ir naudas sodu, ja visi argumenti ir dažādu veidu, bet kā mēs precizētu pasūtījumu, ja argumenti ir tāda paša tipa?
Tag-arg konstruktors nodrošina indekss atribūts, kas norāda secību, pavasara, ar kuru nodot parametrus.
<bean id="constructorBean" class="it.mrwebmaster.di.constructor.bean"> <constructor-arg value="beanName" index="1" /> <constructor-arg ref="genericService" index="0" /> </ Pupiņu>
Vēl viena lieta varētu būt neskaidrs, kad construttore akceptē kā priekšnodokli divus parametrus, kas var gan pārstāv virkni, piemēram:
valsts Bean (GenericService genericService, String beanName, invocationTimes Integer) {
super ();
this.genericService = genericService;
this.beanName = beanName;
this.invocationTimes = invocationTimes;
}
un nell'applicationContext. xml
<bean id="constructorBean2" class="it.mrwebmaster.di.constructor.bean"> <constructor-arg value="0" /> <constructor-arg value="beanName" /> <constructor-arg ref="genericService" /> </ Pupiņu>Šajā gadījumā pavasarī no kļūdas kā "0" var būt vai nu virkni vai numuru. Lai atrisinātu šo problēmu, varat izmantot indeksa vai attriburo tipa atribūts šādā veidā:
<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" /> </ Pupiņu>
Atribūts konstruktors-arg var izmantot arī nodot parametrus rūpnīcas metodi:
valsts statisko pupas createBean (GenericService genericService, String beanName, invocationTimes Integer) {
Bean b = jauni Bean (genericService, beanName, invocationTimes);
/ / Vai somethig .......
atgriezties 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" /> </ Pupiņu>
| |
Linux Course
Pilnīga rokasgrāmata atvērtā koda sistēma. Atlaide -10% līdz 2012/06/01. |
| |
PHP Course
Pilns kurss, lai radītu dinamisku tīmekļa vietnes. Atlaide -5% līdz 2012/06/01. |
| |
Protams, Ruby un Ruby On Rails
Izveide programmatūras un Web lietojumprogrammas ar Ruby un ROR. Atlaide -10% līdz 2012/06/01. |