Java / Статьи / Главная страница
05-02-2008

Spring Framework - первые шаги (Конспект шестой)

Использование Constructor и Setter Injection в Spring Framework

 
Конспект шестой : Constructor versus Setter Injection

В одной из предыдущих лекций я познакомил читателя с тем, как паттерн Dependancy Injection (DI) реализован в Spring Framework и продемонстрировал, каким образом устанавливается зависимость между компонентами в файле конфигурации.

Давайте вспомним рисунок:

Графическое изображение - Setter Injection

 
Обратите внимание на выделенную красным цветом пиктограмму (Р) возле поля класса mailService. Она говорит о том, что связь между компонентами (DI) была выполнена через поле класса ((p)roperties), т.е. с использованием метода setMailServiece(). Подобный способ конфигурации по праву называют – Setter Injection (SI).
Думаю, что опытные разработчики догадаются, что существует и альтернативный способ конфигурирования с использованием конструктора – Constructor Injection (CI)
Давайте рассмотрим пример, иллюстрирующий CI:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
 
<bean id="registerFormController"
class="com.personality.examples.spring.ioc.RegisterFormControllerReadyForIoC">
<constructor-arg>
<ref bean="mailService"/>
</constructor-arg>
</bean>
 
<bean id="mailService"
class="com.personality.examples.spring.ioc.SmtpMailService" />
</beans>
Как видите, изменения, произошедшие в файле конфигурации, в нашем случае, не значительные (выделены красным цветом). Графически подобная конфигурация будет выглядеть следующим образом:

Графическое изображе Сonstructor Injection


Из рисунка видно, что связь между компонентами теперь установлена через конструктор, о чем говорит символ (С) в зеленой окружности.
Особый интерес для читателя может представлять конфигурирование с помощью CI компонент, содержащих в параметрах конструктора класса примитивные типы. Представьте себе ситуацию, когда Вам необходимо "поднять" в application context компоненту, котрая отправляет почту в фоновом потоке, например каждые 10 минут, но не более 100 писем за один проход . Вероятнее всего, конструктор такой компоненты будет выглядеть следующим образом - public MailService(int interval, int maxMailCount);

В таком случае в файл конфигурации необходимо будет добавить следующие строки:

<bean id="mailService"
class="com.personality.examples.spring.ioc.SmtpMailService" >


<constructor-arg index="0" value="10"/>
<constructor-arg index="1" value="100"/>
</bean>
Соответственно изменится и графическое представление подобной конфигурации:

Графическое изображение Constructor Injection

 
Более подробно со всеми нюансами конфигурирования с использованием Constructor Injection пользователь может ознакомиться в разделе 3.3.1.1. Constructor Injection :: The Spring Framework - Reference Documentation.

Как видите, для нашего достаточно примитивного примера, нет разницы между использованием Setter Injection и Constructor Injection.

В следующей лекции мы попробуем разобраться, какой же подход является оптимальным и в каких случаях.


Комментарии к статье "Spring Framework - первые шаги (Конспект шестой)" (7)

Vyacheslav Yakovenko

28-02-2010 21-29 2 Виктор: Если что-то устарело - чтож, такова жизнь. Давайте править вместе. Указывайте, что конкретно, будем править ;)

Виктор

25-02-2010 14-20 Подборка прикольная, пока очень нравится Жалко устарели ссылки на дукументацию

Slava Semushin

24-02-2009 13-28 s/компаненту/компоненту/

Vyacheslav Yakovenko

13-01-2009 21-01 2 постоянный читатель: Как Вам сказать - статьи из этого раздела написаны специально для этого сайта. Так что скорее всего копии как раз на других ресурсах.

RedMac

13-02-2008 18-06 а мне нравиться :Р

постоянный читатель

11-02-2008 21-14 Ну ты даешь RedMac. Все эти статьи это копии с других сайтов. Подборка совсем не уникальна и некоторые статьи этого сайта совсем не в тему :Р

RedMac

11-02-2008 13-26 классная подборка -- жду продолжения


Вам есть, что сказать?




  Введите код