SlideShare a Scribd company logo
Обзор возможностейInversion of ControlАспектно-ориентированное программирование© Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
План презентации1. Общие сведения о Spring Framework2. Возможности Spring Framework3. Inversion of Control4. Аспектно-ориентированное программирование5. Hello World! (java + Spring)6. Пример: Как великий князь в поход ходил© Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
1. Общие сведения о Spring FrameworkOpen 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 Controlpublic 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 Controlpublic 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 ControlSpring – это контейнер, который:Управляет жизненным циклом объектовПозволяет настроить, как он будет их выдавать:- синглетон- новый объект	- пул объектовПозволяет настроить их автоматическое удалениеПозволяет задать зависимости между ними (инжекция зависимостей)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 {@Testpublic void тестПойтиВПоход() throws НеПолучилосьException{ВеликийКнязь князь = new ВеликийКнязь(“Витовт”);	Богатство бг = князь.пойтиВПоход();AssertNotNull(бг);AssertTrue(бг.свободноКонвертируемое());}}© Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
5. Пример: Как великий князь в поход ходилНужно протестировать князя
При этом незаметно тестируется класс ПоходНаПольшу
Если при такой конфигурации написать тест для класса поход, то два теста будут тестировать одно и то же
В классе поход может быть ошибка
Что делать, если мы хотим пойти в другой поход, например на Москву?Решение – создать интерфейс и использовать IoCВ этом случае мы можем сделать поход загрушкой© Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam

More Related Content

PDF
Разработка Enterprise-приложения на основе Spring Framework
PPT
Spring in java
PPTX
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
PPTX
Автоматизация тестирования многопоточности
PDF
Spring the Ripper by Evgeny Borisov
PPTX
системы сборок проектов
PPT
Сервлеты
PPT
Maven как средство сборки проекта
Разработка Enterprise-приложения на основе Spring Framework
Spring in java
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Автоматизация тестирования многопоточности
Spring the Ripper by Evgeny Borisov
системы сборок проектов
Сервлеты
Maven как средство сборки проекта

What's hot (20)

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

Viewers also liked (16)

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

Similar to Konstantin slisenko - Spring Framework (20)

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

More from beloslab (14)

PPTX
Mr. Keil Werner - Stem demo camp
PPTX
Mr. Keil Werner - UOMO 2011
PPT
Mr. Ankur Sharma - PDE good practices
PPTX
Konstantin Slisenko - Belarus Open Source Lab
PPTX
Yuri Trukhin - IE9 Launch
PPTX
Yuri Trukhin - Software developement best practices
PPTX
Yuri Trukhin - Microsoft4students
PPTX
Yuri Trukhin - Windows Phone 7
PPTX
Pavel Rumantsev - Java Script
PPTX
Sergey Gavruk - Mix11
PPTX
Pavel Rumantsev - Html5
PPTX
Aleksei Gomza - ASP.NET MVC3 data processing
PPTX
Aleksei Gomza - Web-applications and ASP
PPTX
Sergey Gavruk - WebMatrix
Mr. Keil Werner - Stem demo camp
Mr. Keil Werner - UOMO 2011
Mr. Ankur Sharma - PDE good practices
Konstantin Slisenko - Belarus Open Source Lab
Yuri Trukhin - IE9 Launch
Yuri Trukhin - Software developement best practices
Yuri Trukhin - Microsoft4students
Yuri Trukhin - Windows Phone 7
Pavel Rumantsev - Java Script
Sergey Gavruk - Mix11
Pavel Rumantsev - Html5
Aleksei Gomza - ASP.NET MVC3 data processing
Aleksei Gomza - Web-applications and ASP
Sergey Gavruk - WebMatrix

Konstantin slisenko - Spring Framework

  • 1. Обзор возможностейInversion of ControlАспектно-ориентированное программирование© Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
  • 2. План презентации1. Общие сведения о Spring Framework2. Возможности Spring Framework3. Inversion of Control4. Аспектно-ориентированное программирование5. Hello World! (java + Spring)6. Пример: Как великий князь в поход ходил© Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
  • 3. 1. Общие сведения о Spring FrameworkOpen 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 Controlpublic 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 Controlpublic 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 ControlSpring – это контейнер, который:Управляет жизненным циклом объектовПозволяет настроить, как он будет их выдавать:- синглетон- новый объект - пул объектовПозволяет настроить их автоматическое удалениеПозволяет задать зависимости между ними (инжекция зависимостей)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 {@Testpublic void тестПойтиВПоход() throws НеПолучилосьException{ВеликийКнязь князь = new ВеликийКнязь(“Витовт”); Богатство бг = князь.пойтиВПоход();AssertNotNull(бг);AssertTrue(бг.свободноКонвертируемое());}}© Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
  • 23. 5. Пример: Как великий князь в поход ходилНужно протестировать князя
  • 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