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

Презентация:



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

Обзор возможностей Инверсия управления Аспектно-ориентированное программирование.
Где хранить данные в web- приложении page –JSP страница request – HTTP запрос session – сессия пользователя application – веб-приложение Static Java class.
Пользовательские действия (custom actions) в JSP. JSTL.
Платформа J2EE Сервис: Java Naming Directory (JNDI) – универсальный сервис хранения объектов в иерархической структуре имен (аналогично файловой системе)
Платформа J2EE Сервис: Java Naming Directory (JNDI) – универсальный сервис хранения объектов в иерархической структуре имен (аналогично файловой системе)
Saint Petersburg, 2012 Java Lecture #12 JSP. JSP 2 Java Server Pages (JSP) – технология разработки веб страниц, поддерживающих динамический контент. Позволяет.
Java Server Pages (JSP). JSP Позволяет веб разработчикам динамически генерировать HTML, XML - и другие веб страницы. Страницы компилируются JSP- компилятором.
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring. Малышкин Фёдор
Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования Александр Межов ОАО ЧЭМК
Рассматриваемые темы Технология EJB Типы EJB Вызов EJB Сборка и развертывание EJB- приложения 2-1.
Единая система аутентификации Обзор решения Москва, 2012г.
Язык Java. JSP.. Java. Синтаксис. Перевод строчки эквивалентен пробелу Регистр в именах различается // Комментарии до конца строки /* Многострочные комментарии.
Evgeniy Krivosheev Last update: March, 2012 Spring Framework Module 10 – JMS, EJB.
JSF/JSP/Tomcat Введение в технологию. JavaServer Faces JSF - фреймворк для веб-приложений, написанный на Java JSF основывается на использовании компонентов.
©Павловская Т.А. (СПбГУ ИТМО) Курс «С#. Программирование на языке высокого уровня» Павловская Т.А.
Web - сервисы. Веб-служба, веб-сервис (англ. web service) идентифицируемая веб-адресом программная система со стандартизированными интерфейсами.англ.веб-адресоминтерфейсами.
Проф. В.К.Толстых, Технологии разработки Internet- приложений ASP.NET приложения – Модули HTTP, фильтры, события приложения - Global.asax.
Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
Рассматриваемые темы Подсистема безопасности сервера приложений Конфигурация безопасности в EJB Сервисы авторизации и аутентификации в Java 2-1.
Транксрипт:

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

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

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

1. Общие сведения о Spring Framework Официальный сайт Spring Framework: es/spring.html ming/114649

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

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

3. Инверсия управления (IoC) public class MailService { public void send(String from, String to, String subject, String text) { // выполняем отправку письма } public class ShopService { private MailService mail; public ShopService() { mail = new MailService(); } public void makeOrder() { // Сохраняем заказанные товары // Отправляем письмо Заказ принят); }

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

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 ShopService { private MailService mail; public void setMailService(MailService mail) { this.mail = mail; } public void makeOrder() { // Сохраняем заказанные товары и отправляем письмо Заказ принят); }

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

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

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

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

Пример XML-конфигурации Spring: 3. Инверсия управления (IoC)

Получение бинов из контейнера с помощью фабрики BeanFactory: public interface BeanFactory { containsBean(String name) ; getBean(String name) ; getType(String name) ; isSingleton(String name) ; } Реализации – контексты Spring-приложений: ClassPathApplicationContext; WebApplicationContext; и др. 3. Инверсия управления (IoC) Пример использования бинов в обычном Java-приложении: public class Main { public static void main(String args[]) { ApplicationContext context = new ClassPathApplicationContext(spring-beans.xml); BasketService service= (BasketService ) context.getBean(basketBean); service.makeOrder(); }

Пример XML-конфигурации Spring, использующей аннотации для описания бинов: 3. Инверсия управления (IoC) public class TestBean { public TestBean() { System.out.println("constructor"); }

Варианты объявления бинов с помощью сервисный слой, бизнес-логика и слой работы с слой работы с бин общего вида Области видимости бинов (scope): singleton – единственный экземпляр в приложении prototype – на каждый запрос бина создаётся новый экземпляр request - на каждый запрос от веб-клиента создаётся новый экземпляр session - единственный экземпляр на время жизни сессии пользователя *Примечание: подчеркнуты области видимости, применимые только к веб- приложению. 3. Инверсия управления (IoC)

Управление жизненным циклом бинов: public class SimpleBean private TestBean private OtherBean public void init() { System.out.println(bean.getData()); } public void setBean(TestBean bean) { this.bean = bean; } применим к полям, методам, конструкторам 3. Инверсия управления (IoC)

Стиль XML: либо либо public class AnotherExampleBean implements InitializingBean { public void afterPropertiesSet() { // do some initialization work } } public class AnotherExampleBean implements DisposableBean { public void destroy() { // do some destruction work (like releasing pooled connections) } } 3. Инверсия управления (IoC)

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

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

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

4. Аспектно-ориентированное программирование import org.aspectj.lang.annotation.Aspect; import public class BeforeExample public void doAccessCheck() { //... ("execution(* com.xyz.myapp.dao.*.*(..))") public void doAccessCheck() { //... public void doRecoveryActions() { //... } *В XML-конфигурацию необходимо добавить и подключить библиотеки AspectJ

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 и всех его подпакетов.

5. Spring и Tomcat 1.Добавить в библиотеки веб-приложения библиотеки Spring 2.В web.xml приложения добавить: contextConfigLocation /WEB-INF/applicationContext.xml org.springframework.web.context.ContextLoaderListener

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

Практическое задание С помощью 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, который перед отправкой сообщения выводит в лог время отправки сообщения.