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

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



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

Обзор возможностей Инверсия управления Аспектно-ориентированное программирование.
Пользовательские действия (custom actions) в JSP. JSTL.
Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования Александр Межов ОАО ЧЭМК
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring. Малышкин Фёдор
Saint Petersburg, 2012 Java Lecture #12 JSP. JSP 2 Java Server Pages (JSP) – технология разработки веб страниц, поддерживающих динамический контент. Позволяет.
Единая система аутентификации Обзор решения Москва, 2012г.
JSF/JSP/Tomcat Введение в технологию. JavaServer Faces JSF - фреймворк для веб-приложений, написанный на Java JSF основывается на использовании компонентов.
Где хранить данные в web- приложении page –JSP страница request – HTTP запрос session – сессия пользователя application – веб-приложение Static Java class.
Платформа J2EE Сервис: Java Naming Directory (JNDI) – универсальный сервис хранения объектов в иерархической структуре имен (аналогично файловой системе)
Microsoft TechDays Сергей Попов Независимый разработчик.
Проф. В.К.Толстых, Технологии разработки Internet- приложений ASP.NET приложения – валидация, валидационные элементы управления Из цикла.
Платформа J2EE Сервис: Java Naming Directory (JNDI) – универсальный сервис хранения объектов в иерархической структуре имен (аналогично файловой системе)
Проф. В.К.Толстых, Технологии разработки Internet- приложений ASP.NET приложения – Модули HTTP, фильтры, события приложения - Global.asax.
Рассматриваемые темы Технология EJB Типы EJB Вызов EJB Сборка и развертывание EJB- приложения 2-1.
Java Server Pages (JSP). JSP Позволяет веб разработчикам динамически генерировать HTML, XML - и другие веб страницы. Страницы компилируются JSP- компилятором.
Java: современные технологии разработки ПО Вашенков О.Е. ООО «РСС», разработчик ПО.
Web - сервисы. Веб-служба, веб-сервис (англ. web service) идентифицируемая веб-адресом программная система со стандартизированными интерфейсами.англ.веб-адресоминтерфейсами.
ФИЛОСОФИЯ.NET Любому современному программисту, который желает идти в ногу с последними веяниями, каждые несколько лет приходится переучиваться.
Рассматриваемые темы Подсистема безопасности сервера приложений Конфигурация безопасности в 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 BasketService { private MailService mail; public BasketService() { 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 BasketService { private MailService mail; public void setMailService(MailService mail) { this.mail = mail; } public void makeOrder() { // Сохраняем заказанные товары и отправляем письмо Заказ принят); } В конфигурационном файле Spring указывается реализация интерфейса

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

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

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

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(); }

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

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() { //... }

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

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