..
Teraz zobaczmy, przez przykład, jak używać Dependency Injection Konstruktor
Tworzymy fasoli, która zależy od usługi ogólnej:
pakiet it.mrwebmaster.di.constructor;
public class Bean {
Prywatne genericService GenericService;
prywatnych beanName String;
/ **
* Producent
* @ GenericService Param
* @ BeanName Param
* /
publicznych Bean (GenericService genericService, String beanName) {
super ();
this.genericService = genericService;
this.beanName = beanName;
}
/ **
* Metody publiczne
* /
publicznych doit void () {
System.out.println (beanName + "robienia czegoś");
genericService.dosomething ();
}
}
skonfigurować zależności 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>
Jak widać z przykładu użyć Dependency Injection Konstruktor musi użyć tag-arg konstruktora przy użyciu ref lub atrybutów wartości. Ref Attibassi należy przekazać jako argument już instancja nell'IoC innego pojemnika, fasoli, podczas gdy wartość atrybutu jest wykorzystywany do przekazywania wartości domyślnych łańcuchów czy liczb.
W przykładzie konstruktor klasy przyjmuje na wejściu fasola GenericService i String, ale przykład chciał odwrócić kolejność argumentów, aby pokazać jak Wiosna łącząc argumenty według ich typów.
Tego typu zachowanie jest dobrze, gdy wszystkie argumenty są różnych typów, ale w jaki sposób określić kolejność, jeśli argumenty są tego samego typu?
Tag-arg konstruktora stanowi atrybut indeks wskazujący, aby na wiosnę, z którym do przekazywania parametrów.
<bean id="constructorBean" class="it.mrwebmaster.di.constructor.bean"> <constructor-arg value="beanName" index="1" /> <constructor-arg ref="genericService" index="0" /> </ Bean>
Innym przypadkiem może być dwuznaczne, w którym construttore przyjmuje na wejściu dwa parametry, które mogą zarówno być reprezentowany przez ciąg, na przykład:
publicznych Bean (GenericService genericService, String beanName, invocationTimes Integer) {
super ();
this.genericService = genericService;
this.beanName = beanName;
this.invocationTimes = invocationTimes;
}
i 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>W tym przypadku pochodzi z błędu "0" może być albo stringiem lub liczbą. Aby rozwiązać ten problem, należy użyć indeksu lub attriburo atrybut typ tak:
<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>
Atrybut konstruktora-arg mogą być również wykorzystywane do przekazywania parametrów do metody fabryki:
public static fasoli createBean (GenericService genericService, String beanName, invocationTimes Integer) {
Bean b = new Bean (genericService, beanName, invocationTimes);
/ / Czy somethig .......
powrót 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 (Kurs)
Kompletny przewodnik do systemu open-source. Od 49 €. |
| |
PHP (Kurs)
Pełny kurs tworzenia dynamicznych stron internetowych. Od 49 €. |
| |
Ruby i Ruby on Rails (Kurs)
Tworzenie oprogramowania i aplikacji webowych w języku Ruby RoR. Od 39 €. |