..
Использование инъекций Конструктор зависимость может привести к созданию циклических зависимостей между бобами. Например, если в заголовках исходящих предмет необходимости быть обработан для объекта Б, но в то же время объект объект B потребности, он создает зависимость, которая не может быть разрешен с помощью инъекций Конструктор зависимостей.
В таких случаях вы должны использовать инъекции сеттер зависимости очень похоже на конструктор, но разница заключается в том, что зависимости вводят после объекта был создан. Вот пример:
{Общественного класса Bean2
Частные genericService GenericService;
общественных setGenericService недействительными (GenericService genericService) {
this.genericService = genericService;
}
общественных getGenericService GenericService () {
genericService возвращения;
}
/ **
* Бизнес-логика .............
* /
}
nell'applicationContext. XML
<bean id="setterBean" class="it.mrwebmaster.di.setter.Bean2"> <property name="genericService" ref="genericService" /> </ Бин>
В дополнение к решению проблемы круговой инъекций сеттер зависимости dipenze также может быть изменена во время выполнения бобы, по этим причинам предпочтительно Конструктор. Некоторые школы мысли, однако, сказать, что хороший было бы использовать entrabe: Конструктор для необходимых зависимостей и установки для этих вариантов. Желательно использовать сеттер, как это очень редкое, что Есть дополнительные зависимости.
Помимо основного использования DI, Есть другие возможности, которые предлагает весны, такие как пустые строки, или вы можете вводить пустые поля:
<! - NULL, значение 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/> </ конструктор-Arg> </ Бин> <! - 2 ЗНАЧЕНИЕ NULL -> <bean id="nullBean2" class="it.mrwebmaster.di.setter.Bean2"> <property name="genericService"> <null/> </ недвижимость> </ Бин>
Весна также предлагает коллекцию управления Список типов, Set, Map, Свойства, а через список тегов, множество, карты, и реквизиты:
{Общественного класса CollectionBean
Список частных <GenericService> beanList;
Частные beanProps свойства;
Частные <String> beanSet сентября;
частные Карта <Integer, string> beanMap;
/ **
* Бизнес-логика ......................
* /
<GenericService> GetBeanList общественных List () {
beanList возвращения;
}
общественных Карта <Integer, string> getBeanMap () {
beanMap возвращения;
}
Общественный getBeanProps Свойства () {
beanProps возвращения;
}
<String> GetBeanSet общественных Set () {
beanSet возвращения;
}
общественных setBeanList недействительными (список <GenericService> beanList) {
this.beanList = beanList;
}
общественного недействительными setBeanMap (Карта <Integer, string> beanMap) {
this.beanMap = beanMap;
}
общественных setBeanProps недействительными (Свойства beanProps) {
this.beanProps = beanProps;
}
общественных setBeanSet недействительными (beanSet Установить <String>) {
this.beanSet = beanSet;
}
}
nell'applicationContext. XML
<! - ФАСОЛЬ КОЛЛЕКЦИЯ ->
<bean id="collectionBean" class="it.mrwebmaster.di.collection.CollectionBean">
<! - СПИСОК ->
<property name="beanList">
<list>
<ref bean="genericService"/>
</ List>
</ Property>
<! - Свойства ->
<property name="beanProps">
<props>
<prop key="prop1"> значение1 </ опора>
<prop key="prop2"> значение2 </ опора>
<prop key="prop3"> value3 </ опора>
</ Реквизит>
</ Property>
<! - SET ->
<property name="beanSet">
<set>
<value> до </ значение>
<value> Ъ </ значение>
</ Установка>
</ Property>
<! - MAP ->
<property name="beanMap">
<map>
<entry key="1" value="value1" />
</ Карта>
</ Property>
</ Бин>
Он оставляет читателя с глубины на другие вопросы, такие, как сбор слияние, внутренняя бобы и сотрудников.
| |
Linux (курс)
Полное руководство по открытым исходным кодом системы. От 49 €. |
| |
PHP (курс)
Полный курс для создания динамических веб-сайтов. От 49 €. |
| |
Руби и Ruby On Rails (курс)
Создание программного обеспечения и веб-приложений с Рубином и RoR. С 39 €. |