..
Använda konstruktorn Dependency Injection kan leda till skapandet av cykliska beroenden mellan bönor. Till exempel, om ett utgående föremål huvuden måste instansieras ett objekt B, men samtidigt det objekt Ett objekt B behov, det skapar ett beroende som inte kan lösas med hjälp av Injection Konstruktör Dependency.
I sådana fall måste du använda Setter Dependency Injection är mycket lik till konstruktorn men skillnaden ligger i det faktum att beroenden injiceras efter att objektet instansieras. Här är ett exempel:
{Public class Bean2
Privat GenericService genericService;
public void setGenericService (GenericService genericService) {
this.genericService = genericService;
}
offentliga GenericService getGenericService () {
genericService tillbaka;
}
/ **
* Affärslogik .............
* /
}
nell'applicationContext. xml
<bean id="setterBean" class="it.mrwebmaster.di.setter.Bean2"> <property name="genericService" ref="genericService" /> </ Bean>
Förutom att lösa problemet med den cirkulära dipenze Setter Dependency Injection kan även konfigureras vid körning bönorna, av dessa skäl är det att föredra till konstruktorn. Vissa skolor av tanke, men säger att det goda skulle vara att använda entrabe: Konstruktor för de nödvändiga beroenden och normgivare för dessa alternativ. Det är lämpligt att använda setter eftersom det är mycket ovanligt att det finns frivilliga beroenden.
Förutom den grundläggande användningen av DI, det finns andra funktioner som våren erbjudanden, såsom tomma strängar, eller så kan du injicera null områden:
<-! NULL-värde 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/> </ bygga-Arg> </ Bean> <- 2 värdet null -> <bean id="nullBean2" class="it.mrwebmaster.di.setter.Bean2"> <property name="genericService"> <null/> </ fastighet> </ Bean>
Spring erbjuder även en samling av förvaltning listan, Set, Karta, Egenskaper och genom taggen listan ställer du in, karta, och rekvisita:
{Public class CollectionBean
Privat lista <GenericService> beanList;
Privata fastigheter beanProps;
Privata <String> beanSet september;
privata Karta <Integer, string> beanMap;
/ **
* Affärslogik ......................
* /
<GenericService> GetBeanList offentliga listan () {
beanList tillbaka;
}
offentliga Karta <Integer, string> getBeanMap () {
beanMap tillbaka;
}
Publika fastigheter getBeanProps () {
beanProps tillbaka;
}
<String> GetBeanSet offentliga Set () {
beanSet tillbaka;
}
public void setBeanList (Lista <GenericService> beanList) {
this.beanList = beanList;
}
public void setBeanMap (Karta <Integer, string> beanMap) {
this.beanMap = beanMap;
}
public void setBeanProps (Egenskaper beanProps) {
this.beanProps = beanProps;
}
public void setBeanSet (Set <String> beanSet) {
this.beanSet = beanSet;
}
}
nell'applicationContext. xml
<-! BEAN SAMLINGEN ->
<bean id="collectionBean" class="it.mrwebmaster.di.collection.CollectionBean">
<-! LISTA ->
<property name="beanList">
<list>
<ref bean="genericService"/>
</ Lista>
</ Fastigheter>
<- Egenskaper ->
<property name="beanProps">
<props>
<prop key="prop1"> värde1 </ prop>
<prop key="prop2"> värde2 </ prop>
<prop key="prop3"> value3 </ prop>
</ Props>
</ Fastigheter>
<- SET ->
<property name="beanSet">
<SET>
<värde> till </ värde>
<värde> B </ värde>
</ Set>
</ Fastigheter>
<-! KARTA ->
<property name="beanMap">
<map>
<entry key="1" value="value1" />
</ Karta>
</ Fastigheter>
</ Bean>
Den lämnar läsaren med djupet i andra frågor, såsom insamling av kopplingen inre bönor och samarbetspartners.
| |
Linux (kurs)
Komplett av öppen källkod-system. Från 49 €. |
| |
PHP (kurs)
Fullständig kurs för att skapa dynamiska webbplatser. Från 49 €. |
| |
Ruby och Ruby on Rails (kurs)
Skapa program och webbapplikationer med Ruby och RoR. Från 39 €. |