1 / 23

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

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

Télécharger la présentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

  3. 1. Общие сведения о Spring Framework • Open Source • Упрощает разработку enterpise-приложений (настройка, тестирование, …) • Может применяться для web, десктопных, мобильных приложений. (Есть android версия) • Платформы – Java, .Net (Spring.NET) • Предоставляет богатый набор вспомогательных классов

  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

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

  6. 2. Возможности Spring • Инверсия управления (Inversion of Control) • Аспектно-ориентированное программирование • Spring – этоконтейнеробъектов, нет необходимости писать в коде new, вместо этого запрашиваем объекты у него • Spring – это фреймворк, который содержит библиотеки для web, orm, security, aop, ioc, mail, remoting – он предоставляет интерфейсы для абстрагирования от этих сервисов

  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(“shop@shop.com”, “customer@customer.com”, “Заказ принят”); } }

  8. 3. Инверсия управления (IoC) • В системе много объектов, которые определённым образом между собой связаны (например, вызывают друг друга) • Если мы указываем зависимости в коде: - трудно тестировать классы по отдельности - трудно подменять классыдля разных конфигураций • Мы можем выделить интерфейс и соединить объекты с помощью set-метода

  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(“shop@shop.com”, “customer@customer.com”, “Заказ принят”); } } В конфигурационном файле Spring указывается реализация интерфейса

  10. 3. Инверсия управления (IoC) • В любом случае мыдолжны установить зависимости в коде и указывать конкретные реализации классов • Решение проблемы – переложить работу по установлению зависимостей на Spring

  11. 3. Инверсия управления (IoC) Spring – это контейнер, который: • Управляет жизненным циклом объектов • Позволяет настроить, как он будет их выдавать: - синглтон - новый объект - пул объектов • Позволяет настроить их автоматическое удаление • Позволяет задать зависимости между ними (подстановка (injection) зависимостей) • Spring IoC – основной модуль Spring

  12. 3. Инверсия управления (IoC) Возможна подстановка зависимостей для любых типов: - коллекции (List, Map, Set, Properties) - пользовательские классы - примитивные и стандартные типы Правила создания объектов и зависимостей между ними описываются в конфигурационном xml-файле

  13. 3. Инверсия управления (IoC) <?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=“mailBean" class=“MailServiceImpl“/> <bean id=“basketBean" class=“BasketService“/> <property name=“mail" ref=“mailBean" /> </bean> </beans> public class Main { public static void main(String args[]) { ApplicationContextcontext = new ClassPathApplicationContext(“spring-beans.xml”); BasketService service= (BasketService) context.getBean(“basketBean”); service.makeOrder(); } }

  14. 3. Инверсия управления (IoC) Преимущества: • Мы можем не указывать конкретные реализации классов (например, для тестов использовать заглушку MailServiceMock, в реальных условиях использовать настоящий класс MailServiceImpl) • Нет необходимости самостоятельно управлять жизненным циклом объектов • При замене модулей не нужно перекомпилировать приложение т.к. модули соединяются декларативно

  15. 3. Инверсия управления (IoC) • Контейнеров может быть несколько • Процедура создания контейнера зачастую занимает много времени – не рекомен-дуется создавать много контейнеров • Обычно создаётся один контейнер для одного приложения

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

  17. 4. Аспектно-ориентированное программирование • Классы, которые описывают такой функционал, называются аспектами • В Spring существует своя реализация АОП • Она подходит для реализации задач средней сложности • Для более сложных - разработчики Spring рекомендуют использовать библиотеку AspectJ

  18. 4. Аспектно-ориентированное программирование Spring поддерживает четыре способа выполнения аспектов: • Before advice – перед выполнением метода; • After returning advice – после того, как метод возвратит результат; • After throwing advice – после того, как метод создаст исключительную ситуацию; • Around advice – комбинация трёх вышеперечисленных способов.

  19. 4. Аспектно-ориентированное программирование import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; @Aspect public 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() { // ... } }

  20. 4. Аспектно-ориентированное программирование Возможные способы связывания аспектов с кодом с помощью выражения execution: execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?) – формат выражения execution • execution(public * *(..)) – вызов аспекта после выполнения любого public-метода; • execution(* set*(..)) – вызов аспекта после выполнения любого метода, название которого начинается с set; • execution(* com.xyz.service.AccountService.*(..)) – вызов аспекта после выполнения любого метода класса com.xyz.service.AccountService; • execution(* com.xyz.service.*.*(..)) – вызов аспекта после выполнения любого метода из пакета service; • execution(* com.xyz.service..*.*(..)) - вызов аспекта после выполнения любого метода из пакета service и всех его подпакетов.

  21. 5. Spring и Tomcat • Добавить в библиотеки веб-приложения библиотеки Spring • В 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/>

  22. 6. Контрольные вопросы • Что такое Spring? Какие возможности предоставляет фреймворк? • Что такое инверсия управления? Зачем она нужна? • Какую роль играет контейнер объектов вSpring? Что такое Bean? • Что такое аспектно-ориентированное программирование? Что такое аспект? • Перечислите четыре способа выполнения аспектов в Spring.

  23. Практическое задание С помощью Spring написать программу, отправляющую сообщение, введённое пользователем: • Подключить в проект необходимые для работы со Spring библиотеки; • Создать интерфейс MessageSender с единственным методом send(String text) и его реализацию MessageSenderImpl; • Создать веб-страницу с формой для ввода текста сообщения; • Создать класс MessageService, содержащий поле MessageSender и методы get() и set(); • Создать сервлет, обрабатывающий форму с текстом сообщения и, используя класс MessageService, отправить сообщение; • Сформировать файл конфигурации для Spring, описать 2 созданных класса: MessageSenderImplи MessageService; • Запустить веб-сервер и проверить отправку сообщения; • Добавить в приложение аспект MyAspect, который перед отправкой сообщения выводит в лог время отправки сообщения.

More Related