Шаблон «Инверсия управления» Использование Spring Framework
Характеристики программных объектов
Жизненные циклы объектов
Singleton
Пример конфигурации Spring
Пример использования Spring
Inversion Of Control
Пример конфигурации на аннотациях
Дополнительные преимущества IoC
Реализации
Литература
56.52K
Category: programmingprogramming

Шаблон «Инверсия управления». Повторение кода, проблема порядка инициализации, замена mock-объектами при модульном тестировании

1. Шаблон «Инверсия управления» Использование Spring Framework

2. Характеристики программных объектов

• Статические:
– Тип объекта (класс, интерфейс)
– Методы и свойства объекта (из иерархии
классов/интерфейсов)
• Динамические:
– Жизненный цикл объекта (создание,
инициализация, удаление)
– Зависимости объекта от других объектов
– Безопасность использования в многопоточной среде

3. Жизненные циклы объектов

• Долгоживущие (пока работает программа)
– Сервисы, контроллеры, объекты доступа к данным
• Сессионные (во время сессии пользователя)
– Информация о текущем пользователе, состояние
wizard’а, интерфейсных элементов
• Временные (во время обработки действия
пользователя)
– Объекты, выгруженные из БД для обработки
текущего запроса (доменная модель)

4. Singleton

• Долгоживущие объекты – Singleton-ы
– Реализация getInstance()
• Проблемы: повторение кода, проблема порядка
инициализации, замена mock-объектами при
модульном тестировании
- Реализация: реестр синглетонов
• Один синглетон, который управляет остальными

5. Пример конфигурации Spring

6. Пример использования Spring

7. Inversion Of Control

• Представляет собой реестр (контейнер) объектов,
которыми управляет
• Позволяет декларативно конфигурировать объекты и
их свойства
• Сам код классов может не зависеть от IoC фреймворка.
IoC контейнер является “клеем”
• Берет на себя
– Управление жизненным циклом объекта (когда и кем
создается, когда удаляется)
– Управление зависимостями (объект лишь говорит что ему
нужно)

8. Пример конфигурации на аннотациях

9. Дополнительные преимущества IoC

• Возможность прозрачно использовать
паттерны семейства Factory в IoC (сам код,
использующий объекты не знает о
фабриках)
• Сильно снижает степень зависимости
между классами, => легко тестируемые
классы
• Хорошо накладывается на принципы AOP.

10. Реализации


Spring Framework (OpenSource, Java)
Spring.NET (OpenSource)
Castle (OpenSource, .NET)
Unity (Microsoft, .NET)
Google Juice (OpenSource, Java)
EJB 3+ (Java, JSR Standard)

11. Литература

• Spring reference
• Spring In Action / Manning
English     Русский Rules