Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Конфигурация коллекций

Factory Method

FactoryBean

Конфигурация

 

Одним из способов кастомизированного создания новых экземпляров объектов является реализация интерфейса org.springframework.beans.factory.FactoryBean.

 

Этот интерфейс задаёт следующие методы:

  • Object getObject(): возвращает экземпляр объекта созданного FactoryBean’ом.
  • boolean isSingleton(): возвращает свойство является ли область видимости бина singleton или prototype.
  • Class getObjectType(): возвращает тип создаваемого объекта, или null, если этот тип заранее определить нельзя.

 

Существует способ использования шаблона Factory не прибегая к созданию дополнительных утилитных классов.

Для этого можно воспользоваться XML конструкцией в файле конфигурации следующего вида:

<bean id="clientService" class="examples.ClientService" factory-method="createInstance"/>

 

При этом, исходный код соответвующего factory bean’а выглядит следующим образом:

public class ClientService { private static ClientService clientService = new ClientService(); private ClientService() {} public static ClientService createInstance() { return clientService; }}

 

Это приведёт к фактическому использованию статического factory метода, каждый раз, когда необходимо получить бин из контектса.

 

Альтернативным подходом является вызов определённого factory метода на определённом бине из контекста:

 

<!-- the factory bean, which contains a method called createInstance() --><bean id="serviceLocator" class="examples.DefaultServiceLocator"> <!-- inject any dependencies required by this locator bean --></bean> <!-- the bean to be created via the factory bean --><bean id="clientService" factory-bean="serviceLocator" factory-method="createClientServiceInstance"/>

 

При этом исходный код имеет вид:

public class DefaultServiceLocator { private static ClientService clientService = new ClientServiceImpl(); private DefaultServiceLocator() {} public ClientService createClientServiceInstance() { return clientService; }}

 

Данный подход позволяет использовать уже более гибкий шаблон Abstract Factory, так как работает с экземплярами объекта factory, а не со статическим методом.

 

 

Конфигурационный XML файл Spring позволяет в качестве зависимых объектов колабораторов вставлять экземпляры коллекции и конфигурировать их.

 

<bean id="moreComplexObject" class="example.ComplexObject"><!-- results in a setAdminEmails(java.util.Properties) call --><property name="adminEmails"> <props> <prop key="administrator">[email protected]</prop> <prop key="support">[email protected]</prop> <prop key="development">[email protected]</prop> </props></property><!-- results in a setSomeList(java.util.List) call --><property name="someList"> <list> <value>a list element followed by a reference</value> <ref bean="myDataSource" /> </list></property><!-- results in a setSomeMap(java.util.Map) call --><property name="someMap"> <map> <entry key="an entry" value="just some string"/> <entry key ="a ref" value-ref="myDataSource"/> </map></property><!-- results in a setSomeSet(java.util.Set) call --><property name="someSet"> <set> <value>just some string</value> <ref bean="myDataSource" /> </set></property></bean>

 

В качестве значения для set или map могут быть использованы следующие элементы:

bean | ref | idref | list | set | map | props | value | null

 

 

<== предыдущая лекция | следующая лекция ==>
Отложенная инициализация бинов | Первичные преобразователи (датчики)
Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 343; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.