SlideShare une entreprise Scribd logo
1  sur  27
Обзор возможностей Inversion of Control Аспектно-ориентированное программирование © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
План презентации 1. Общие сведения о Spring Framework 2. Возможности Spring Framework 3. Inversion of Control 4. Аспектно-ориентированное программирование 5. Hello World! (java + Spring) 6. Пример: Как великий князь в поход ходил © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
1. Общие сведения о Spring Framework Open Source Упрощает разработку enterpise-приложений (настройка, тестирование, …) Может применяться для web, десктопных, мобильных приложений. (Есть android версия) Платформы – Java, .Net (Spring.NET) Предоставляет богатый набор вспомогательных классов © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
1. Общие сведения о Spring Framework Официальный сайт Spring Framework: 	springsource.org © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
1. Общие сведения о Spring Framework © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
2. Возможности Spring Инверсия контроля (IoC) Аспектно-ориентированное программирование Spring – этоконтейнеробъектов, нет необходимости писать в коде new, вместо этого запрашиваем объекты у него Spring – это фреймворк, который содержит библиотеки для web, orm, security, aop, ioc, mail, remoting – он предоставляет интерфейсы для абстрагирования от этих сервисов © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
3. Inversion of Control public class MailService { public void send(String from, String to, String subject, String text) { 	// выполняем отправку письма } } public class BasketService { private MailService mail; public BasketService() { 	mail = new MailService(); } public void makeOrder() { 	// Сохраняем заказанные товары 	// Отправляем письмо mail.send(“shop@shop.com”, “customer@customer.com”, “Заказ принят”); 	} } © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
3. Inversion of Control В системе много объектов, которые определённым образом между собой связаны (например, вызывают друг друга) Если мы указываем зависимости в коде: - трудно тестировать классы по отдельности - трудно подменять классыдля разных конфигураций Мы можем выделить интерфейс и соединить объекты с помощью set-метода © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
3. Inversion of Control public interface MailService { public void send(String from, String to, String subject, String text) ; } public class MailServiceImpl  implements MailService{ public void send(String from, String to, String subject, String text) { 	// выполняем отправку письма } } public class BasketService { private MailService mail; 	public void setMailService(MailService mail) { this.mail = mail; } public void makeOrder() { 	// Сохраняем заказанные товарыи отправляем письмо mail.send(“shop@shop.com”, “customer@customer.com”, “Заказ принят”); 	} } © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
3. Inversion of Control В любом случае мыдолжны установить зависимости в коде и указывать конкретные реализации классов Решение проблемы – переложить работу по установлению зависимостей на Spring © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
3. Inversion of Control Spring – это контейнер, который: Управляет жизненным циклом объектов Позволяет настроить, как он будет их выдавать: - синглетон - новый объект 	- пул объектов Позволяет настроить их автоматическое удаление Позволяет задать зависимости между ними (инжекция зависимостей) Spring IoC – основной модуль Spring © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
3. Inversion of Control Возможна инжекция зависимостей для любых типов: - коллекции (List, Map, Set, Properties) - пользовательские классы - примитивные и стандартные типы Правила создания объектов и зависимостей между ними описываются в конфигураци-онномxml-файле © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
3. Inversion of Control Преимущества: Мы можем не указывать конкретные реализации классов (например, для тестов  использовать заглушку MailServiceMock, в реальных условиях использовать настоящий класс MailServiceImpl) Нет необходимости самостоятельно управлять жизненным циклом объектов При замене модулей не нужно перекомпилировать приложение т.к. модули соединяются декларативно © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
3. Inversion of Control Контейнеров может быть несколько Процедура создания контейнера зачастую занимает много времени – не рекомен-дуется создавать много контейнеров Обычно создаётся один  контейнер для одного  	приложения © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
4. Аспектно-ориентированное программирование Существует такая функциональность, которая не относится к каким-либо модулям системы Логирование Проверка прав доступа Вызов метода в рамках транзакции С помощью АОП мы можем подключаться в определённые места программы и вставлять нужный нам код © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
4. Аспектно-ориентированное программирование Классы, которые описывают такой функционал, называются аспектами В Spring существует своя реализация АОП Она подходит для реализации задач средней сложности Для более сложных - разработчики Spring рекомендуют использовать библиотеку AspectJ © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
5. Hello World! public interface Hello { public void sayHello(); } public class HelloImpl implements Hello { private String name; public void setName(String name) { 	this.name = name; 	} public void sayHello() { System.out.println(“Hello, ” + name); } } public class HelloWorld { public static void main(String args[]) { ApplicationContext context = new ClassPathApplicationContext(“spring-beans.xml”); 		Hello hello = (Hello) context.getBean(“hello”); hello.sayHello(); } } © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
5. Hello World! <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=http://www.springframework.org/schema/beansxmlns:xsi=http://www.w3.org/2001/XMLSchema-instancexsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> 	<bean id="hello" class=“package.HelloImpl"> 	<property name=“name" value=“Karl Gerdeler" /> 	</bean> </beans> © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
5. Пример: Как великий князь в поход ходил 	Задача: Написать класс великого князя, который поведёт войско в поход на Польшу © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
5. Пример: Как великий князь в поход ходил public class ВеликийКнязь{ private String имя; private ПоходНаПольшу поход; public ВеликийКнязь(String имя) { 	this.имя = имя; поход = new ПоходНаПольшу(); } public Богатство пойтиВПоход() throws НеПолучилосьException { 	return поход.сходить(); } } © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
5. Пример: Как великий князь в поход ходил public class ПоходНаПольшу{ public ПоходНаПольшу() {} public Богатство пойтиВПоход() throws НеПолучилосьException { 	Богатство бг = null; побитьВсех(); бг = забратьБогатство(); 	return бг; } } © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
5. Пример: Как великий князь в поход ходил public class КнязьTest { @Test public void тестПойтиВПоход() throws НеПолучилосьException{ ВеликийКнязь князь = new ВеликийКнязь(“Витовт”); 	Богатство бг = князь.пойтиВПоход(); AssertNotNull(бг); AssertTrue(бг.свободноКонвертируемое()); } } © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
5. Пример: Как великий князь в поход ходил ,[object Object]
При этом незаметно тестируется класс ПоходНаПольшу
Если при такой конфигурации написать тест для класса поход, то два теста будут тестировать одно и то же
В классе поход может быть ошибка
Что делать, если мы хотим пойти в другой поход, например на Москву?Решение – создать интерфейс и использовать IoC В этом случае мы можем сделать поход загрушкой © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam

Contenu connexe

Tendances

Maven 3 : уличная магия
Maven 3 : уличная магияMaven 3 : уличная магия
Maven 3 : уличная магия
Aleksey Solntsev
 
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha DmitryUafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
Max Rozdobudko
 
UAFPUG6 - PureMVC
UAFPUG6 - PureMVCUAFPUG6 - PureMVC
UAFPUG6 - PureMVC
mandrew182
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
Regn
 

Tendances (20)

Основы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрованияОсновы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрования
 
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с MavenКурс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
 
Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)
 
JSP
JSPJSP
JSP
 
Владимир Еремин. Extending Openstack. PyCon Belarus 2015
Владимир Еремин. Extending Openstack. PyCon Belarus 2015Владимир Еремин. Extending Openstack. PyCon Belarus 2015
Владимир Еремин. Extending Openstack. PyCon Belarus 2015
 
Maven 3 : уличная магия
Maven 3 : уличная магияMaven 3 : уличная магия
Maven 3 : уличная магия
 
Cookies, session и другое в JSP
Cookies, session и другое в JSPCookies, session и другое в JSP
Cookies, session и другое в JSP
 
Курс Java-2016. Занятие 06. Файлы и ввод-вывод
Курс Java-2016. Занятие 06. Файлы и ввод-выводКурс Java-2016. Занятие 06. Файлы и ввод-вывод
Курс Java-2016. Занятие 06. Файлы и ввод-вывод
 
Java 9 - Back to the Future
Java 9 - Back to the FutureJava 9 - Back to the Future
Java 9 - Back to the Future
 
Системы автоматизированной сборки (Lecture 05 – gradle)
Системы автоматизированной сборки (Lecture 05 – gradle)Системы автоматизированной сборки (Lecture 05 – gradle)
Системы автоматизированной сборки (Lecture 05 – gradle)
 
Введение в Android-разработку (Lecture 06 – basics)
Введение в Android-разработку (Lecture 06 – basics)Введение в Android-разработку (Lecture 06 – basics)
Введение в Android-разработку (Lecture 06 – basics)
 
JIRA. С добавками. Для тестировщиков
JIRA. С добавками. Для тестировщиковJIRA. С добавками. Для тестировщиков
JIRA. С добавками. Для тестировщиков
 
Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"
Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"
Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"
 
PureMVC and Papervision
PureMVC and PapervisionPureMVC and Papervision
PureMVC and Papervision
 
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha DmitryUafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
 
UAFPUG6 - PureMVC
UAFPUG6 - PureMVCUAFPUG6 - PureMVC
UAFPUG6 - PureMVC
 
Ruby on Rails. Работа с моделями — продолжение
Ruby on Rails. Работа с моделями — продолжениеRuby on Rails. Работа с моделями — продолжение
Ruby on Rails. Работа с моделями — продолжение
 
Обзор Ruby
Обзор RubyОбзор Ruby
Обзор Ruby
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщика
 

En vedette

Скорость не в ущерб качеству, web-разработка на Java, Java day, Omsk, 2014
Скорость не в ущерб качеству, web-разработка на Java, Java day, Omsk, 2014Скорость не в ущерб качеству, web-разработка на Java, Java day, Omsk, 2014
Скорость не в ущерб качеству, web-разработка на Java, Java day, Omsk, 2014
Anna Tarasenko
 
Javaone 2013 moscow gradle
Javaone 2013 moscow gradleJavaone 2013 moscow gradle
Javaone 2013 moscow gradle
Evgeny Borisov
 
Проблемы производительности open source библиотек
Проблемы производительности open source библиотекПроблемы производительности open source библиотек
Проблемы производительности open source библиотек
Vladimir Sitnikov
 

En vedette (16)

66 - Spring. Spring и JSF
66 - Spring. Spring и JSF66 - Spring. Spring и JSF
66 - Spring. Spring и JSF
 
Очень вкусный фрукт Guava
Очень вкусный фрукт GuavaОчень вкусный фрукт Guava
Очень вкусный фрукт Guava
 
Скорость не в ущерб качеству, web-разработка на Java, Java day, Omsk, 2014
Скорость не в ущерб качеству, web-разработка на Java, Java day, Omsk, 2014Скорость не в ущерб качеству, web-разработка на Java, Java day, Omsk, 2014
Скорость не в ущерб качеству, web-разработка на Java, Java day, Omsk, 2014
 
"IntelliJ IDEA и Android Studio для Android-разработчиков". Филипп Торчинский...
"IntelliJ IDEA и Android Studio для Android-разработчиков". Филипп Торчинский..."IntelliJ IDEA и Android Studio для Android-разработчиков". Филипп Торчинский...
"IntelliJ IDEA и Android Studio для Android-разработчиков". Филипп Торчинский...
 
Gradle. Новый уровень автоматизации для Android
Gradle. Новый уровень автоматизации для AndroidGradle. Новый уровень автоматизации для Android
Gradle. Новый уровень автоматизации для Android
 
67 - Spring. Начальные знания
67 - Spring. Начальные знания67 - Spring. Начальные знания
67 - Spring. Начальные знания
 
Javaone 2013 moscow gradle
Javaone 2013 moscow gradleJavaone 2013 moscow gradle
Javaone 2013 moscow gradle
 
141 - Spring. Добавление контроллеров Spring MVC
141 - Spring. Добавление контроллеров Spring MVC141 - Spring. Добавление контроллеров Spring MVC
141 - Spring. Добавление контроллеров Spring MVC
 
Введение в maven
Введение в mavenВведение в maven
Введение в maven
 
Gradle
GradleGradle
Gradle
 
Getting Started with Spring Framework
Getting Started with Spring FrameworkGetting Started with Spring Framework
Getting Started with Spring Framework
 
Apache Camel + Apache ActiveMQ persistence
Apache Camel + Apache ActiveMQ persistenceApache Camel + Apache ActiveMQ persistence
Apache Camel + Apache ActiveMQ persistence
 
Проблемы производительности open source библиотек
Проблемы производительности open source библиотекПроблемы производительности open source библиотек
Проблемы производительности open source библиотек
 
Maven lifecycle
Maven lifecycleMaven lifecycle
Maven lifecycle
 
Секреты сборки мусора в Java
Секреты сборки мусора в JavaСекреты сборки мусора в Java
Секреты сборки мусора в Java
 
Spring Framework - Core
Spring Framework - CoreSpring Framework - Core
Spring Framework - Core
 

Similaire à Konstantin slisenko - Spring Framework

Konstantin slisenko - Design patterns
Konstantin slisenko - Design patternsKonstantin slisenko - Design patterns
Konstantin slisenko - Design patterns
beloslab
 
Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0
Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0
Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0
beloslab
 
Client Side Autotesting Flash
Client Side Autotesting FlashClient Side Autotesting Flash
Client Side Autotesting Flash
guestb0af15
 
Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in developement
Konstantin Slisenko -  OSGi, Equinox, Eclipse plug-in developementKonstantin Slisenko -  OSGi, Equinox, Eclipse plug-in developement
Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in developement
beloslab
 
Android - 01 - Java Basics
Android - 01 - Java BasicsAndroid - 01 - Java Basics
Android - 01 - Java Basics
Noveo
 

Similaire à Konstantin slisenko - Spring Framework (20)

Konstantin slisenko - Design patterns
Konstantin slisenko - Design patternsKonstantin slisenko - Design patterns
Konstantin slisenko - Design patterns
 
Unit test быстрый старт
Unit test быстрый стартUnit test быстрый старт
Unit test быстрый старт
 
Сергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CСергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3C
 
Node.js (RichClient)
 Node.js (RichClient) Node.js (RichClient)
Node.js (RichClient)
 
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыMoscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
 
Решения для автоматизации тестирования Web-приложений на базе Selenium
Решения для автоматизации тестирования Web-приложений на базе SeleniumРешения для автоматизации тестирования Web-приложений на базе Selenium
Решения для автоматизации тестирования Web-приложений на базе Selenium
 
Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0
Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0
Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0
 
Client Side Autotesting Flash
Client Side Autotesting FlashClient Side Autotesting Flash
Client Side Autotesting Flash
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОП
 
Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in developement
Konstantin Slisenko -  OSGi, Equinox, Eclipse plug-in developementKonstantin Slisenko -  OSGi, Equinox, Eclipse plug-in developement
Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in developement
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
 
Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)
 
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
 
Froglogic Squish
Froglogic Squish Froglogic Squish
Froglogic Squish
 
Android - 01 - Java Basics
Android - 01 - Java BasicsAndroid - 01 - Java Basics
Android - 01 - Java Basics
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NET
 
C# Desktop. Занятие 01.
C# Desktop. Занятие 01.C# Desktop. Занятие 01.
C# Desktop. Занятие 01.
 
Помоги ближнему, или Как потоки помогают друг другу
Помоги ближнему, или Как потоки помогают друг другуПомоги ближнему, или Как потоки помогают друг другу
Помоги ближнему, или Как потоки помогают друг другу
 
Помоги ближнему, или Как потоки помогают друг другу
Помоги ближнему, или Как потоки помогают друг другуПомоги ближнему, или Как потоки помогают друг другу
Помоги ближнему, или Как потоки помогают друг другу
 
Groovy presentation on Exception #7 conference
Groovy presentation on Exception #7 conferenceGroovy presentation on Exception #7 conference
Groovy presentation on Exception #7 conference
 

Plus de beloslab

Mr. Keil Werner - Stem demo camp
Mr. Keil Werner - Stem demo campMr. Keil Werner - Stem demo camp
Mr. Keil Werner - Stem demo camp
beloslab
 
Mr. Keil Werner - UOMO 2011
Mr. Keil Werner - UOMO 2011Mr. Keil Werner - UOMO 2011
Mr. Keil Werner - UOMO 2011
beloslab
 
Mr. Ankur Sharma - PDE good practices
Mr. Ankur Sharma - PDE good practicesMr. Ankur Sharma - PDE good practices
Mr. Ankur Sharma - PDE good practices
beloslab
 
Konstantin Slisenko - Belarus Open Source Lab
Konstantin Slisenko - Belarus Open Source LabKonstantin Slisenko - Belarus Open Source Lab
Konstantin Slisenko - Belarus Open Source Lab
beloslab
 
Yuri Trukhin - IE9 Launch
Yuri Trukhin - IE9 LaunchYuri Trukhin - IE9 Launch
Yuri Trukhin - IE9 Launch
beloslab
 
Yuri Trukhin - Software developement best practices
Yuri Trukhin - Software developement best practicesYuri Trukhin - Software developement best practices
Yuri Trukhin - Software developement best practices
beloslab
 
Yuri Trukhin - Microsoft4students
Yuri Trukhin - Microsoft4studentsYuri Trukhin - Microsoft4students
Yuri Trukhin - Microsoft4students
beloslab
 
Yuri Trukhin - Windows Phone 7
Yuri Trukhin - Windows Phone 7Yuri Trukhin - Windows Phone 7
Yuri Trukhin - Windows Phone 7
beloslab
 
Pavel Rumantsev - Java Script
Pavel Rumantsev - Java ScriptPavel Rumantsev - Java Script
Pavel Rumantsev - Java Script
beloslab
 
Sergey Gavruk - Mix11
Sergey Gavruk - Mix11Sergey Gavruk - Mix11
Sergey Gavruk - Mix11
beloslab
 
Pavel Rumantsev - Html5
Pavel Rumantsev - Html5Pavel Rumantsev - Html5
Pavel Rumantsev - Html5
beloslab
 
Aleksei Gomza - ASP.NET MVC3 data processing
Aleksei Gomza - ASP.NET MVC3 data processingAleksei Gomza - ASP.NET MVC3 data processing
Aleksei Gomza - ASP.NET MVC3 data processing
beloslab
 
Aleksei Gomza - Web-applications and ASP
Aleksei Gomza - Web-applications and ASPAleksei Gomza - Web-applications and ASP
Aleksei Gomza - Web-applications and ASP
beloslab
 
Sergey Gavruk - WebMatrix
Sergey Gavruk - WebMatrixSergey Gavruk - WebMatrix
Sergey Gavruk - WebMatrix
beloslab
 

Plus de beloslab (14)

Mr. Keil Werner - Stem demo camp
Mr. Keil Werner - Stem demo campMr. Keil Werner - Stem demo camp
Mr. Keil Werner - Stem demo camp
 
Mr. Keil Werner - UOMO 2011
Mr. Keil Werner - UOMO 2011Mr. Keil Werner - UOMO 2011
Mr. Keil Werner - UOMO 2011
 
Mr. Ankur Sharma - PDE good practices
Mr. Ankur Sharma - PDE good practicesMr. Ankur Sharma - PDE good practices
Mr. Ankur Sharma - PDE good practices
 
Konstantin Slisenko - Belarus Open Source Lab
Konstantin Slisenko - Belarus Open Source LabKonstantin Slisenko - Belarus Open Source Lab
Konstantin Slisenko - Belarus Open Source Lab
 
Yuri Trukhin - IE9 Launch
Yuri Trukhin - IE9 LaunchYuri Trukhin - IE9 Launch
Yuri Trukhin - IE9 Launch
 
Yuri Trukhin - Software developement best practices
Yuri Trukhin - Software developement best practicesYuri Trukhin - Software developement best practices
Yuri Trukhin - Software developement best practices
 
Yuri Trukhin - Microsoft4students
Yuri Trukhin - Microsoft4studentsYuri Trukhin - Microsoft4students
Yuri Trukhin - Microsoft4students
 
Yuri Trukhin - Windows Phone 7
Yuri Trukhin - Windows Phone 7Yuri Trukhin - Windows Phone 7
Yuri Trukhin - Windows Phone 7
 
Pavel Rumantsev - Java Script
Pavel Rumantsev - Java ScriptPavel Rumantsev - Java Script
Pavel Rumantsev - Java Script
 
Sergey Gavruk - Mix11
Sergey Gavruk - Mix11Sergey Gavruk - Mix11
Sergey Gavruk - Mix11
 
Pavel Rumantsev - Html5
Pavel Rumantsev - Html5Pavel Rumantsev - Html5
Pavel Rumantsev - Html5
 
Aleksei Gomza - ASP.NET MVC3 data processing
Aleksei Gomza - ASP.NET MVC3 data processingAleksei Gomza - ASP.NET MVC3 data processing
Aleksei Gomza - ASP.NET MVC3 data processing
 
Aleksei Gomza - Web-applications and ASP
Aleksei Gomza - Web-applications and ASPAleksei Gomza - Web-applications and ASP
Aleksei Gomza - Web-applications and ASP
 
Sergey Gavruk - WebMatrix
Sergey Gavruk - WebMatrixSergey Gavruk - WebMatrix
Sergey Gavruk - WebMatrix
 

Konstantin slisenko - Spring Framework

  • 1. Обзор возможностей Inversion of Control Аспектно-ориентированное программирование © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
  • 2. План презентации 1. Общие сведения о Spring Framework 2. Возможности Spring Framework 3. Inversion of Control 4. Аспектно-ориентированное программирование 5. Hello World! (java + Spring) 6. Пример: Как великий князь в поход ходил © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
  • 3. 1. Общие сведения о Spring Framework Open Source Упрощает разработку enterpise-приложений (настройка, тестирование, …) Может применяться для web, десктопных, мобильных приложений. (Есть android версия) Платформы – Java, .Net (Spring.NET) Предоставляет богатый набор вспомогательных классов © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
  • 4. 1. Общие сведения о Spring Framework Официальный сайт Spring Framework: springsource.org © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
  • 5. 1. Общие сведения о Spring Framework © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
  • 6. 2. Возможности Spring Инверсия контроля (IoC) Аспектно-ориентированное программирование Spring – этоконтейнеробъектов, нет необходимости писать в коде new, вместо этого запрашиваем объекты у него Spring – это фреймворк, который содержит библиотеки для web, orm, security, aop, ioc, mail, remoting – он предоставляет интерфейсы для абстрагирования от этих сервисов © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
  • 7. 3. Inversion of Control public class MailService { public void send(String from, String to, String subject, String text) { // выполняем отправку письма } } public class BasketService { private MailService mail; public BasketService() { mail = new MailService(); } public void makeOrder() { // Сохраняем заказанные товары // Отправляем письмо mail.send(“shop@shop.com”, “customer@customer.com”, “Заказ принят”); } } © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
  • 8. 3. Inversion of Control В системе много объектов, которые определённым образом между собой связаны (например, вызывают друг друга) Если мы указываем зависимости в коде: - трудно тестировать классы по отдельности - трудно подменять классыдля разных конфигураций Мы можем выделить интерфейс и соединить объекты с помощью set-метода © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
  • 9. 3. Inversion of Control public interface MailService { public void send(String from, String to, String subject, String text) ; } public class MailServiceImpl implements MailService{ public void send(String from, String to, String subject, String text) { // выполняем отправку письма } } public class BasketService { private MailService mail; public void setMailService(MailService mail) { this.mail = mail; } public void makeOrder() { // Сохраняем заказанные товарыи отправляем письмо mail.send(“shop@shop.com”, “customer@customer.com”, “Заказ принят”); } } © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
  • 10. 3. Inversion of Control В любом случае мыдолжны установить зависимости в коде и указывать конкретные реализации классов Решение проблемы – переложить работу по установлению зависимостей на Spring © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
  • 11. 3. Inversion of Control Spring – это контейнер, который: Управляет жизненным циклом объектов Позволяет настроить, как он будет их выдавать: - синглетон - новый объект - пул объектов Позволяет настроить их автоматическое удаление Позволяет задать зависимости между ними (инжекция зависимостей) Spring IoC – основной модуль Spring © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
  • 12. 3. Inversion of Control Возможна инжекция зависимостей для любых типов: - коллекции (List, Map, Set, Properties) - пользовательские классы - примитивные и стандартные типы Правила создания объектов и зависимостей между ними описываются в конфигураци-онномxml-файле © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
  • 13. 3. Inversion of Control Преимущества: Мы можем не указывать конкретные реализации классов (например, для тестов использовать заглушку MailServiceMock, в реальных условиях использовать настоящий класс MailServiceImpl) Нет необходимости самостоятельно управлять жизненным циклом объектов При замене модулей не нужно перекомпилировать приложение т.к. модули соединяются декларативно © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
  • 14. 3. Inversion of Control Контейнеров может быть несколько Процедура создания контейнера зачастую занимает много времени – не рекомен-дуется создавать много контейнеров Обычно создаётся один контейнер для одного приложения © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
  • 15. 4. Аспектно-ориентированное программирование Существует такая функциональность, которая не относится к каким-либо модулям системы Логирование Проверка прав доступа Вызов метода в рамках транзакции С помощью АОП мы можем подключаться в определённые места программы и вставлять нужный нам код © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
  • 16. 4. Аспектно-ориентированное программирование Классы, которые описывают такой функционал, называются аспектами В Spring существует своя реализация АОП Она подходит для реализации задач средней сложности Для более сложных - разработчики Spring рекомендуют использовать библиотеку AspectJ © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
  • 17. 5. Hello World! public interface Hello { public void sayHello(); } public class HelloImpl implements Hello { private String name; public void setName(String name) { this.name = name; } public void sayHello() { System.out.println(“Hello, ” + name); } } public class HelloWorld { public static void main(String args[]) { ApplicationContext context = new ClassPathApplicationContext(“spring-beans.xml”); Hello hello = (Hello) context.getBean(“hello”); hello.sayHello(); } } © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
  • 18. 5. Hello World! <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=http://www.springframework.org/schema/beansxmlns:xsi=http://www.w3.org/2001/XMLSchema-instancexsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean id="hello" class=“package.HelloImpl"> <property name=“name" value=“Karl Gerdeler" /> </bean> </beans> © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
  • 19. 5. Пример: Как великий князь в поход ходил Задача: Написать класс великого князя, который поведёт войско в поход на Польшу © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
  • 20. 5. Пример: Как великий князь в поход ходил public class ВеликийКнязь{ private String имя; private ПоходНаПольшу поход; public ВеликийКнязь(String имя) { this.имя = имя; поход = new ПоходНаПольшу(); } public Богатство пойтиВПоход() throws НеПолучилосьException { return поход.сходить(); } } © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
  • 21. 5. Пример: Как великий князь в поход ходил public class ПоходНаПольшу{ public ПоходНаПольшу() {} public Богатство пойтиВПоход() throws НеПолучилосьException { Богатство бг = null; побитьВсех(); бг = забратьБогатство(); return бг; } } © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
  • 22. 5. Пример: Как великий князь в поход ходил public class КнязьTest { @Test public void тестПойтиВПоход() throws НеПолучилосьException{ ВеликийКнязь князь = new ВеликийКнязь(“Витовт”); Богатство бг = князь.пойтиВПоход(); AssertNotNull(бг); AssertTrue(бг.свободноКонвертируемое()); } } © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
  • 23.
  • 24. При этом незаметно тестируется класс ПоходНаПольшу
  • 25. Если при такой конфигурации написать тест для класса поход, то два теста будут тестировать одно и то же
  • 26. В классе поход может быть ошибка
  • 27. Что делать, если мы хотим пойти в другой поход, например на Москву?Решение – создать интерфейс и использовать IoC В этом случае мы можем сделать поход загрушкой © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
  • 28. 5. Пример: Как великий князь в поход ходил public interface Поход { public Богатство пойтиВПоход() throws НеПолучилосьException; } Public class ПоходНаПольшуimplements Поход { public Богатство пойтиВПоход() throws НеПолучилосьException { Богатство бг = null; // получение богатства return бг; } } public class ВеликийКнязь{ private String имя; private Поход поход; public ВеликийКнязь(String имя) { this.имя = имя; } public void setПоход(Поход поход) { this.поход = поход; } public Богатство пойтиВПоход() throws НеПолучилосьException { return поход.сходить(); } } © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
  • 29. 5. Пример: Как великий князь в поход ходил <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=http://www.springframework.org/schema/beansxmlns:xsi=http://www.w3.org/2001/XMLSchema-instancexsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean id=“quest“class=“package.ПоходНаПольшу"> </bean> <bean id=“prince" class=“package.ВеликийКнязь"> <constructor-argvalue=“Витовт" /> <property name=“поход" ref=“quest" /> </bean> </beans> © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
  • 30. 5. Пример: Как великий князь в поход ходил public class ВеликийКнязьApp{ public static void main() throws НеПолучилосьException { ApplicationContext context = new ClassPathApplicationContext(“spring-beans.xml”); ВеликийКнязькнязь = (ВеликийКнязь) context.getBean(“prince”); князь.пойтиВПоход(); } } В реальных проектах князь может быть менеджером транзакций, сервисом удалённого взаимодействия, и т.д. © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
  • 31. Спасибо за внимание! Вопросы? © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam