Konstantin slisenko - Spring Framework
Upcoming SlideShare
Loading in...5
×
 

Konstantin slisenko - Spring Framework

on

  • 1,324 views

 

Statistics

Views

Total Views
1,324
Views on SlideShare
1,258
Embed Views
66

Actions

Likes
0
Downloads
20
Comments
0

2 Embeds 66

http://oslab.by 65
http://hghltd.yandex.net 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Konstantin slisenko - Spring Framework Konstantin slisenko - Spring Framework Presentation Transcript

  • Обзор возможностей
    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. Пример: Как великий князь в поход ходил
    • Нужно протестировать князя
    • При этом незаметно тестируется класс ПоходНаПольшу
    • Если при такой конфигурации написать тест для класса поход, то два теста будут тестировать одно и то же
    • В классе поход может быть ошибка
    • Что делать, если мы хотим пойти в другой поход, например на Москву?
    Решение – создать интерфейс и использовать IoC
    В этом случае мы можем сделать поход загрушкой
    © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam
  • 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
  • 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
  • 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
  • Спасибо за внимание!
    Вопросы?
    © Belarus Open Source Laboratory, TechDayДокладчик: Константин Слисенко, JazzTeam