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

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

Теперь, прежде чем перейти к экспериментам с фреймворком, нам осталось разобраться, собственно, каким образом Spring связывает компоненты между собой.

 

Конспект четветый : Application context

В предыдущих лекциях мы обсудили основопологающие принципы, заложенные в основу Spring Framework и определили каким образом фреймворк позоволяет поддерживать слабую связь между компонентами приложения. И теперь, прежде чем перейти к экспериментам с фреймворком, нам осталось разобраться, собственно, каким образом Spring связывает компоненты между собой.
Для начала, я предлагаю разобраться с термином, достаточно часто фигурирующем везде, где упоминается Spring - "контекст" (context).
Контекст – это среда, в которой существует объект. Давайте разберемся, что в нашем случае является средой, а что объектом. Объект - это разрабатываемая Вами компонента (bean), а среда – все остальные компоненты (beans), необходимые для жизненного цикла вашей компоненты. Например, контроллер, позволяющий отправить клиенту сообщение по почте, в данном случае является объектом, а сам мэйлер, логер, etc. – являются средой окружения.
Обратите внимание на то, что в реальном приложении каждая компонента (bean) может выступать, как в роли объекта, так и в роли среды. Таким образом, описание набора компанент (beans) и взаимосвязей между ними и является контекстом приложения (application context).

В конечном счете, для разработчика, использующего Spring Framework, Application Context представляет собой набор xml – файлов и аннотаций, описывающий компоненты (beans) и взаимосвязи между ними.
Если читатель помнит, во втором конспекте лекций, я создавал класс Framework, который жестко кодировал создание компонент и связей между ними. Сейчас пришло время, перейти к декларативному оформлению того же контекста. Итак, давайте рассмотрим пример конфигурационного файла для компонент из второй лекции:
<?xml version="1.0" encoding="UTF-8"?>
<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">
<property name="mailService" ref="mailService" />
</bean>
<bean id="mailService"
class="com.personality.examples.spring.ioc.SmtpMailService" />
</beans>
Обратите внимание на то, что данный конфигурационный файл создает экземпляры двух бинов: registerFormController и mailService и устанавливает взаимосвязь между ними с помощью атрибута ref. Т.о. Spring Framework, обработав соответствующий конфигурационный файл, создаст экемпляр класса SmtpMailService, после чего создаст экземпляр RegisterFormControllerReadyForIoC и только затем установит между ними взаимосвязь (injection) соответвующего мейлера и контроллера. При этом используется нотация JavaBean (соответствие полей класса и методов setXXX(), getXXX()). Графически эта конфигурация будет выглядеть следующим образом:

Графическое изображения контекста приложения в среде Eclipse

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

Vyacheslav Yakovenko

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


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

Ali

19-04-2010 05-43 Здраствуйте!Вы не могли бы выложить законченные коды,а так начинающему трудно разобраться.

Vyacheslav Yakovenko

20-03-2010 10-14 виталий: 1. Что я могу сказать - "читать, читать и еще раз читать." Внимательно, начиная с первой лекции, вдумчиво, пытаясь запускать приведенные примеры, эксперементировать. Это не яблоко на тарелочке с каемочкой - это установочные лекции, которые требуют вдумчивой работы. 2. По сути :) - во второй лекции приведен пример "хардкода", а именно "MailService mailService = new SmtpMailService();" В этом случае, когда заказчик попросит Вас заменить SMTP на IMAP - что вы будете делать? Вы будете пересобирать весь проект. Четвертая лекция демонстрирует пример связывания компонент системы на основе их интерфейсов, когда меняя конфигурационный файл вы можете "подсунуть" системе совсем другую компоненту - т.н. слабое связывание. Почитайте что-нибудь про low coupling. Google Вам поможет ;)

виталий

11-03-2010 18-32 я не очень понял зачем нам устанавливать связь через sprint есть в вотором пример явным образовм package com.personality.examples.spring.ioc; publicclass Framework { publicstaticvoid main(String[] args) { MailService mailService = new SmtpMailService(); //здесь явно вызвали класс которые в дальнейшем обрабатывает функции в чем тут фреймворк я не понял RegisterFormControllerReadyForIoC controller = new RegisterFormControllerReadyForIoC(); controller.setMailService(mailService); controller.send(); } } т.к. я вижу тут ни каких связей не надо устанавливать и или покажи полностью что кого вызывает и писать xml за чем и каким образом он устанавливает связь между чем и чем и что он вызывает

RedMac

13-02-2008 17-57 Может кто знает: где это можно рисовать и сразу конвертить в xml? ЧТоб это всё ручками не писать?


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




  Введите код