..
Katsotaanpa nyt, esimerkillään, miten käyttää Constructor Dependency Injection
Luomme papu että riippuu peruspalvelut:
it.mrwebmaster.di.constructor paketti;
public class Bean {
Yksityinen GenericService genericService;
private String beanName;
/ **
* Valmistaja
* @ Param genericService
* @ Param beanName
* /
julkinen Bean (GenericService genericService, String beanName) {
super ();
this.genericService = genericService;
this.beanName = beanName;
}
/ **
* Julkinen tapa
* /
public void doit () {
System.out.println (beanName + "tehdä jotain");
genericService.dosomething ();
}
}
määrittää riippuvuus 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>
Kuten voidaan nähdä esimerkiksi käyttää Constructor Dependency Injection on käyttää tag-arg rakentaja käyttää viite tai arvo attribuutteja. Ref Attibassi tarvitse mennä kuin ARG jo instantiated nell'IoC toinen papusäiliön, kun arvoa määritettä käytetään siirtämään oletusarvoihin kuten merkkijonoja tai numeroita.
Esimerkissä luokan rakentaja hyväksyy syötteenä GenericService pavut ja String, mutta esimerkiksi hän halusi järjestyksen vaihtamisesta argumentteja, jotka osoittavat kuinka kevät yhdistämällä argumentit niiden tyypin mukaan.
Tämäntyyppinen käytös on hienoa, kun kaikki argumentit ovat erilaisia, mutta miten voimme määrittää järjestyksen, jos argumentit ovat samaa tyyppiä?
Tag-arg rakentaja tarjoaa index ominaisuus, joka ilmaisee järjestystä keväänä joka välittää parametreja.
<bean id="constructorBean" class="it.mrwebmaster.di.constructor.bean"> <constructor-arg value="beanName" index="1" /> <constructor-arg ref="genericService" index="0" /> </ Bean>
Toinen tapaus voisi olla epäselvä, jossa construttore hyväksyy syötteenä kaksi tekijää, jotka molemmat voivat edustaa merkkijono, esimerkiksi:
julkinen Bean (GenericService genericService, String beanName, invocationTimes Integer) {
super ();
this.genericService = genericService;
this.beanName = beanName;
this.invocationTimes = invocationTimes;
}
ja 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>Tällöin pulppuavat virheen muodossa "0" voidaan joko merkkijono tai numero. Voit ratkaista tämän ongelman käyttämällä indeksiä tai attriburo Ominaisuuden näin:
<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>
Attribuutti rakentaja-arg voidaan käyttää myös välittää parametreja tehdas menetelmä:
public static papu createBean (GenericService genericService, String beanName, invocationTimes Integer) {
Bean b = uusi Bean (genericService, beanName, invocationTimes);
/ / Do somethig .......
palata 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 (kurssi)
Täydellinen opas avoimen lähdekoodin järjestelmä. Alkaen 49 €. |
| |
PHP (kurssi)
Täysi tietenkin luoda dynaamisia Web-sivustoja. Alkaen 49 €. |
| |
Ruby ja Ruby on Rails (kurssi)
Luo ohjelmistojen ja web-sovellusten kanssa Ruby ja RoR. Alkaen 39 €. |