..
Теперь давайте посмотрим, на примерах, как использовать конструктор инъекции зависимостей
Мы создаем наш компонент, который зависит от общей службы:
it.mrwebmaster.di.constructor пакет;
открытый класс Бин {
Частные genericService GenericService;
частные beanName String;
/ **
* Производитель
* @ Param genericService
* @ Param beanName
* /
общественных Bean (GenericService genericService, String beanName) {
супер ();
this.genericService = genericService;
this.beanName = beanName;
}
/ **
* Открытый метод
* /
общественных пустяк недействительными () {
System.out.println (beanName + "делает что-то");
genericService.dosomething ();
}
}
настроить зависимость 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"/> </ Бин>
Как видно из примера, использование инъекций Конструктор зависимости необходимо использовать тэг-аргумент конструктора с использованием ссылок или значение атрибутов. Ссылка Attibassi нужно передать как аргумент уже экземпляр nell'IoC другого контейнера для кофейных зерен, в то время как значение атрибута используется для передачи значения по умолчанию в виде строки или числа.
В примере конструктор класса принимает в качестве входных данных GenericService бобы и String, но пример, который он хотел, чтобы изменить порядок аргументов, чтобы показать, как весна объединения аргументы по их типу.
Этот тип поведения хорошо, когда все аргументы разных типов, но как мы можем указать порядок, если аргументы того же типа?
Тэг-аргумент конструктора обеспечивает индекс атрибут, который указывает порядок, в Весна, с которой для передачи параметров.
<bean id="constructorBean" class="it.mrwebmaster.di.constructor.bean"> <constructor-arg value="beanName" index="1" /> <constructor-arg ref="genericService" index="0" /> </ Бин>
Другое дело, может быть неоднозначным, в котором construttore принимает в качестве входных данных два параметра, которые могут быть одновременно представлены строку, например:
общественных Bean (GenericService genericService, String beanName, invocationTimes Integer) {
супер ();
this.genericService = genericService;
this.beanName = beanName;
this.invocationTimes = invocationTimes;
}
и nell'applicationContext. XML
<bean id="constructorBean2" class="it.mrwebmaster.di.constructor.bean"> <constructor-arg value="0" /> <constructor-arg value="beanName" /> <constructor-arg ref="genericService" /> </ Бин>В этом случае, весной от ошибок как "0" может быть строкой или числом. Чтобы решить эту проблему, используйте индекс или attriburo атрибут типа вот так:
<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" /> </ Бин>
Атрибут конструктор-аргумент может также использоваться для передачи параметров в фабричный метод:
общественности статической боб createBean (GenericService genericService, String beanName, invocationTimes Integer) {
Компонент Б = новый Bean (genericService, beanName, invocationTimes);
/ / Do somethig .......
возвращение б;
}
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" /> </ Бин>
| |
Linux (курс)
Полное руководство по открытым исходным кодом системы. От 49 €. |
| |
PHP (курс)
Полный курс для создания динамических веб-сайтов. От 49 €. |
| |
Руби и Ruby On Rails (курс)
Создание программного обеспечения и веб-приложений с Рубином и RoR. С 39 €. |