Professional Documents
Culture Documents
Spring Framework IoC Container
Spring Framework IoC Container
Реферат
з дисципліни «Технології комп'ютерного проектування»
Виконала:
студентка групи АИ-202
Полянський М.О.
Перевірив:
Іванов О. В.
Одеса 2022
ЗМІСТ
1. Архітектура..................................................................................................................3
2. Прямий потік керування.............................................................................................4
3. Інверсія потоку керування..........................................................................................5
4. Коли без IoC не обійтися............................................................................................8
5. Чи є модель подій синонімом IoC?..........................................................................10
6. Бібліотеки та каркаси................................................................................................10
7. Технічна реалізація IoC.............................................................................................11
ВИСНОВОК...................................................................................................................13
2
Spring це досить популярний opensource проект, що охоплює багато аспектів
як J2EE, так і Java розробок
1. Архітектура
Архітектура Spring представлена наступною схемою:
3
2. Прямий потік керування
Ось як виглядатиме архітектура цієї системи без застосування принципу
IoC, тобто direct control. У цій архітектурі буде передбачено лише перший аспект
масштабування.
Малюнок 3
Main(string[] args)
5
3. Інверсія потоку керування
Малюнок 4
Тепер у нас одна точка входу: Принтер. Main (args: string). Тепер у
параметрі args (це аргументи командного рядка) ми будемо передавати назву
індексу (ММВБ або РТС), який потрібно надрукувати.
Main(string[] args)
{
ПровайдерДанныхГрафика провайдерДанныхГрафика;
if (args[0] == "ММВБ") 6
провайдерДанныхГрафика = new ПровайдерДанныхГрафика_ММВБ();
if (args[0] == "РТС")
Стрілки від компонента Принтер до компонента
ПровайдерДанихГрафіка_ММВБ і від компонента Принтер до компонента
ПровайдерДаннихГрафіка_РТС зроблені нежирними недарма. Вони можуть
взагалі бути відсутніми (або навіть направлені у зворотний бік, якщо дуже
потрібно), якщо в технічній реалізації використовується IoCContainer або патерн
«Factory Method». Виходить, що пов'язаність може зменшуватися не тільки
завдяки самому принципу IoC, але і завдяки його технічній реалізації, але про це
буде сказано нижче. У наведеному вище псевдокод IoCContainer і патерн
«Factory Method» не використовуються, тому стрілки присутні.
7
Малюнок 5
Зауважу, що кількість компонентів, що розділяються, не змінилося.
Тепер розглянемо перший аспект масштабування. Додавання нового
біржового індексу ІНД вимагатиме додавання нового компонента
ПровайдерДанихГрафіка_ІНД. Усі інші компоненти системи мають залишитися
без змін. У контексті першого аспекту масштабування динамічними
компонентами є ПровайдерДанихГрафіка_ММВБ і
ПровайдерДанихГрафіка_РТ С. Статичними компонентами є всі інші
компоненти: ДаніГрафіка, Принтер (ГенераторГрафіків, Графік). Потік
керування спрямований від статичних компонентів до динамічних. Це і є
визначення інверсованого потоку керування.
ПРИМІТКА
З коду видно, що принцип IoC покладається на поліморфізм (один
із трьох принципів ОВП).
Малюнок 6
Main(string[] args)
{
ПровайдерДанныхГрафика провайдерДанныхГрафика;
if (args[0] == "ММВБ")
провайдерДанныхГрафика = new ПровайдерДанныхГрафика_ММВБ();
if (args[0] == "РТС")
провайдерДанныхГрафика = new ПровайдерДанныхГрафика_РТС();
9
ГенераторГрафиков генераторГрафиков;
if (args[1] == "Цветной")
генераторГрафиков = new ГенераторГрафиков_Цветной();
if (args[1] == "ЧерноБелый")
генераторГрафиков = new ГенераторГрафиков_ЧерноБелый();
11
керування є потік керування від динамічних компонентів до статичних.
Динамічні та статичні компоненти визначені в контексті будь-якого аспекту
масштабування. Поняття аспекту масштабування, динамічних та статичних
компонентів є поняттями, які застосовуються під час проектування (design time).
Події дозволяють інвертувати потік управління під час виконання (run time). І їм
зовсім не важливо, який потік управління вони інвертують: від динамічних
компонентів до статичних або статичних до динамічних.
6. Бібліотеки та каркаси
ПРИМІТКА
Подієва модель спирається на можливість передати адресу методу
змінної і викликати цей метод через цю змінну.
Малюнок 7
Тут сміливо можна забрати нежирні стрілки. У компонент
ПровайдерДанихГрафіка додається статичний метод
ОтриматиЕкземпляр(ім'яІндексу: string). Якщо цьому методу як параметр
передати рядок «ММВБ» він поверне «примірник» компонента
ПровайдерДанихГрафіка_ММВБ (аналогічно до інших біржових індексів). Для
цього компонент ПровайдерДанихГрафіка повинен залежати від своїх
спадкоємців. Це недобре, але про це трохи нижче.
14
Опишу на псевдокоді, як працює ця архітектура:
Main(string[] args)
{
ПровайдерДанныхГрафика провайдерДанныхГрафика =
ПровайдерДанныхГрафика.ПолучитьЭкземпляр(args[0]);
ГенераторГрафиков генераторГрафиков = new ГенераторГрафиков();
ДанныеГрафика данныеГрафика = провайдерДанныхГрафика.ПолучитьДанные();
График график = генераторГрафиков.ПолучитьГрафик(данныеГрафика, args[0]);
график.Напечатать();
}
ВИСНОВОК
15
У загальному випадку, IoC-контейнер – це певний програмний код
(фреймворк, окремий клас), який здійснює впровадження залежностей у додатку
та, наскільки це можливо, спрощує цей процес.
1. управління залежностями
2. спрощення повторного використання класів чи компонентів
3. спрощення unit-тестування
4. більш "чистий" код (Класи більше не займаються ініціалізацією
допоміжних об'єктів. Не варто, звичайно "перегинати палицю", керуючи
створенням всіх об'єктів через IoC. У IoC контейнер краще всього
виносити ті інтерфейси, реалізація яких може бути змінена в поточному
проекті або у майбутніх проектах.)
16
Spring набагато більше, ніж просто IoC контейнер. Framework спрощує
розробку J2EE проектів, реалізуючи низькорівневі та найчастіше використовувані
частини корпоративної програми.
17