Обзор возможностей

23
Обзор возможностей Инверсия управления Аспектно-ориентированное программирование

Upload: patrick-mullins

Post on 01-Jan-2016

57 views

Category:

Documents


1 download

DESCRIPTION

Обзор возможностей. Инверсия управления Аспектно -ориентированное программирование. План презентации. 1. Общие сведения о Spring Framework 2. Возможности Spring Framework 3. Инверсия управления ( IoC ) 4. Аспектно -ориентированное программирование (АОП ) 5. Spring и Tomcat - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Обзор возможностей

Обзор возможностейИнверсия управления

Аспектно-ориентированное программирование

Page 2: Обзор возможностей

План презентации

1. Общие сведения о Spring Framework2. Возможности Spring Framework3. Инверсия управления (IoC) 4. Аспектно-ориентированное

программирование (АОП)5. Spring и Tomcat6. Контрольные вопросы

Page 3: Обзор возможностей

1. Общие сведения о Spring Framework

• Open Source• Упрощает разработку enterpise-приложений

(настройка, тестирование, …)• Может применяться для web, десктопных,

мобильных приложений. (Есть android версия)

• Платформы – Java, .Net (Spring.NET)• Предоставляет богатый набор

вспомогательных классов

Page 4: Обзор возможностей

1. Общие сведения о Spring Framework

Официальный сайт Spring Framework:http://springsource.org

http://www.spring-source.ru/

http://www.javaportal.ru/java/articles/spring.html

http://habrahabr.ru/blogs/programming/114649

Page 5: Обзор возможностей

1. Общие сведения о Spring Framework

Page 6: Обзор возможностей

2. Возможности Spring

• Инверсия управления (Inversion of Control)• Аспектно-ориентированное программирование• Spring – это контейнер объектов, нет

необходимости писать в коде new, вместо этого запрашиваем объекты у него

• Spring – это фреймворк, который содержит библиотеки для web, orm, security, aop, ioc, mail, remoting – он предоставляет интерфейсы для абстрагирования от этих сервисов

Page 7: Обзор возможностей

3. Инверсия управления (IoC)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(“[email protected]”, “[email protected]”, “Заказ принят”);

}}

Page 8: Обзор возможностей

3. Инверсия управления (IoC)• В системе много объектов, которые

определённым образом между собой связаны (например, вызывают друг друга)

• Если мы указываем зависимости в коде:- трудно тестировать классы по отдельности- трудно подменять классы для разных конфигураций

• Мы можем выделить интерфейс и соединить объекты с помощью set-метода

Page 9: Обзор возможностей

3. Инверсия управления (IoC)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(“[email protected]”, “[email protected]”, “Заказ принят”);

}}

В конфигурационном файле Spring указывается реализация интерфейса

Page 10: Обзор возможностей

3. Инверсия управления (IoC)

• В любом случае мы должны установить зависимости в коде и указывать конкретные реализации классов

• Решение проблемы – переложить работу по установлению зависимостей на Spring

Page 11: Обзор возможностей

3. Инверсия управления (IoC)

Spring – это контейнер, который:• Управляет жизненным циклом объектов• Позволяет настроить, как он будет их выдавать:

- синглтон- новый объект- пул объектов

• Позволяет настроить их автоматическое удаление• Позволяет задать зависимости между ними

(подстановка (injection) зависимостей)• Spring IoC – основной модуль Spring

Page 12: Обзор возможностей

3. Инверсия управления (IoC)

Возможна подстановка зависимостей для любых типов:- коллекции (List, Map, Set, Properties)- пользовательские классы- примитивные и стандартные типы

Правила создания объектов и зависимостей между ними описываются в конфигурационном xml-файле

Page 13: Обзор возможностей

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns=http://www.springframework.org/schema/beans xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

<bean id=“mailBean" class=“MailServiceImpl“/>

<bean id=“basketBean" class=“BasketService“/> <property name=“mail" ref=“mailBean" />

</bean></beans>

3. Инверсия управления (IoC)

public class Main {public static void main(String args[]) { ApplicationContext context = new ClassPathApplicationContext(“spring-beans.xml”);

BasketService service= (BasketService ) context.getBean(“basketBean”); service.makeOrder();

}}

Page 14: Обзор возможностей

3. Инверсия управления (IoC)

Преимущества:1. Мы можем не указывать конкретные реализации

классов (например, для тестов использовать заглушку MailServiceMock, в реальных условиях использовать настоящий класс MailServiceImpl)

2. Нет необходимости самостоятельно управлять жизненным циклом объектов

3. При замене модулей не нужно перекомпилировать приложение т.к. модули соединяются декларативно

Page 15: Обзор возможностей

3. Инверсия управления (IoC)

• Контейнеров может быть несколько• Процедура создания контейнера зачастую

занимает много времени – не рекомен-дуется создавать много контейнеров

• Обычно создаётся один контейнер для одного приложения

Page 16: Обзор возможностей

4. Аспектно-ориентированное программирование

• Существует такая функциональность, которая не относится к каким-либо модулям системы– Логирование– Проверка прав доступа– Вызов метода в рамках транзакции– Обработка исключительных ситуаций

• С помощью АОП мы можем подключаться в определённые места программы и вставлять нужный нам код

Page 17: Обзор возможностей

4. Аспектно-ориентированное программирование

• Классы, которые описывают такой функционал, называются аспектами

• В Spring существует своя реализация АОП• Она подходит для реализации задач

средней сложности• Для более сложных - разработчики Spring

рекомендуют использовать библиотеку AspectJ

Page 18: Обзор возможностей

4. Аспектно-ориентированное программирование

Spring поддерживает четыре способа выполнения аспектов:• Before advice – перед выполнением метода;• After returning advice – после того, как

метод возвратит результат;• After throwing advice – после того, как

метод создаст исключительную ситуацию;• Around advice – комбинация трёх

вышеперечисленных способов.

Page 19: Обзор возможностей

4. Аспектно-ориентированное программированиеimport org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;

@Aspectpublic class BeforeExample {

@Before("com.xyz.myapp.SystemArchitecture.dataAccessOperation()") public void doAccessCheck() { // ... }

@AfterReturning ("execution(* com.xyz.myapp.dao.*.*(..))") public void doAccessCheck() { // ... }

@AfterThrowing("com.xyz.myapp.SystemArchitecture.dataAccessOperation()") public void doRecoveryActions() { // ... }

}

Page 20: Обзор возможностей

4. Аспектно-ориентированное программирование

Возможные способы связывания аспектов с кодом с помощью выражения execution:

execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?) – формат выражения execution

1. execution(public * *(..)) – вызов аспекта после выполнения любого public-метода;

2. execution(* set*(..)) – вызов аспекта после выполнения любого метода, название которого начинается с set;

3. execution(* com.xyz.service.AccountService.*(..)) – вызов аспекта после выполнения любого метода класса com.xyz.service.AccountService;

4. execution(* com.xyz.service.*.*(..)) – вызов аспекта после выполнения любого метода из пакета service;

5. execution(* com.xyz.service..*.*(..)) - вызов аспекта после выполнения любого метода из пакета service и всех его подпакетов.

Page 21: Обзор возможностей

5. Spring и Tomcat1. Добавить в библиотеки веб-приложения библиотеки Spring2. В web.xml приложения добавить:

<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param>

<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>

3. В applicationContext.xml – файл конфигурации Spring:4. Если используем АОП, то не забыть в applicationContext.xml добавить <aop:aspectj-autoproxy/>

Page 22: Обзор возможностей

6. Контрольные вопросы1. Что такое Spring? Какие возможности

предоставляет фреймворк?2. Что такое инверсия управления? Зачем

она нужна?3. Какую роль играет контейнер объектов в

Spring? Что такое Bean?4. Что такое аспектно-ориентированное

программирование? Что такое аспект?5. Перечислите четыре способа выполнения

аспектов в Spring.

Page 23: Обзор возможностей

Практическое заданиеС помощью Spring написать программу, отправляющую сообщение,

введённое пользователем:1) Подключить в проект необходимые для работы со Spring

библиотеки;2) Создать интерфейс MessageSender с единственным методом

send(String text) и его реализацию MessageSenderImpl;3) Создать веб-страницу с формой для ввода текста сообщения;4) Создать класс MessageService, содержащий поле MessageSender и

методы get() и set();5) Создать сервлет, обрабатывающий форму с текстом сообщения и,

используя класс MessageService, отправить сообщение;6) Сформировать файл конфигурации для Spring, описать 2 созданных

класса: MessageSenderImpl и MessageService;7) Запустить веб-сервер и проверить отправку сообщения;8) Добавить в приложение аспект MyAspect, который перед отправкой

сообщения выводит в лог время отправки сообщения.