..
Brug Constructor Dependency Injection kan føre til skabelsen af cykliske afhængigheder mellem bønner. For eksempel, hvis en udgående forbehold headere skal instantieres til et objekt B, men samtidig objektet et objekt B har behov for det skaber en afhængighed, der ikke kan løses ved hjælp af Konstruktør Dependency Injection.
I sådanne tilfælde skal du bruge Setter Dependency Injection er meget lig den Constructor men forskellen ligger i det faktum, at afhængigheder er indsprøjtet efter at objektet blev instantieres. Her er et eksempel:
{Public class Bean2
Privat GenericService genericService;
public void setGenericService (GenericService genericService) {
this.genericService = genericService;
}
offentlige GenericService getGenericService () {
genericService vende tilbage;
}
/ **
* Forretningslogik .............
* /
}
nell'applicationContext. xml
<bean id="setterBean" class="it.mrwebmaster.di.setter.Bean2"> <property name="genericService" ref="genericService" /> </ Bean>
Ud over at løse problemet med den cirkulære dipenze Setter Dependency Injection kan også omkonfigureres på runtime bønner, for disse grunde er det foretrukne til Constructor. Nogle skoler til at tænke, dog sige, at det gode ville være at bruge entrabe: Constructor for den nødvendige afhængigheder og settere for disse muligheder. Det er tilrådeligt at bruge setter da det er meget sjældent, at der er valgfrie afhængigheder.
Ud over de grundlæggende brug af DI, er der andre funktioner, som foråret byder på, såsom tomme strenge, eller du kan injicere null felter:
<-! NULL VÆRDI 1 -> <bean id="nullBean1" class="it.mrwebmaster.di.constructor.bean" factory-method="createBean"> <constructor-arg type="java.lang.Integer" value="0" /> <constructor-arg type="java.lang.String" value="" /> <constructor-arg type="it.mrwebmaster.di.constructor.GenericService"> <null/> </ konstruktør-arg> </ Bean> <-! 2-værdien NULL -> <bean id="nullBean2" class="it.mrwebmaster.di.setter.Bean2"> <property name="genericService"> <null/> </ Ejendom> </ Bean>
Forår tilbyder også en samling af forvaltningen typen Liste, Set, Map, Egenskaber og gennem tag listen, sæt, kort, og rekvisitter:
{Public class CollectionBean
Listen Privat <GenericService> beanList;
Private ejendomme beanProps;
Privat <string> beanSet september;
private Kort <Integer, string> beanMap;
/ **
* Forretningslogik ......................
* /
<GenericService> GetBeanList offentlig liste () {
beanList vende tilbage;
}
offentlige Kort <Integer, string> getBeanMap () {
beanMap vende tilbage;
}
Offentlig Properties getBeanProps () {
beanProps vende tilbage;
}
<string> GetBeanSet offentlige Set () {
beanSet vende tilbage;
}
public void setBeanList (Liste <GenericService> beanList) {
this.beanList = beanList;
}
public void setBeanMap (Kort <Integer, string> beanMap) {
this.beanMap = beanMap;
}
public void setBeanProps (Egenskaber beanProps) {
this.beanProps = beanProps;
}
public void setBeanSet (Set <string> beanSet) {
this.beanSet = beanSet;
}
}
nell'applicationContext. xml
<-! BEAN COLLECTION ->
<bean id="collectionBean" class="it.mrwebmaster.di.collection.CollectionBean">
<-! LISTE ->
<property name="beanList">
<list>
<ref bean="genericService"/>
</ List>
</ Ejendom>
<-! Egenskaber ->
<property name="beanProps">
<props>
<prop key="prop1"> værdi1 </ prop>
<prop key="prop2"> værdi2 </ prop>
<prop key="prop3"> value3 </ prop>
</ Redskaber>
</ Ejendom>
<-! SET ->
<property name="beanSet">
<set>
<value> til </ value>
<value> b </ value>
</ Set>
</ Ejendom>
<-! MAP ->
<property name="beanMap">
<MAP>
<entry key="1" value="value1" />
</ Kort>
</ Ejendom>
</ Bean>
Det efterlader læseren med dybden på andre områder, såsom indsamling af fletningen, den inderste bønner og samarbejdspartnere.
| |
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 €. |