SlideShare une entreprise Scribd logo
1  sur  67
Télécharger pour lire hors ligne
Введение в Spring
Spring
Spring Framework (или
коротко Spring) —
универсальный
фреймворк с открытым
исходным кодом для Java
EE платформы.
Spring
Spring Framework обеспечивает
решения многих задач, с
которыми сталкиваются Java
разработчики и организации,
которые хотят создать
информационную систему,
основанную на платформе Java.
Spring
Spring Framework не полностью
связан с платформой Java EE,
но имеет масштабную
интеграцию с ней, что является
важной причиной его
популярности.
Spring история
Первая версия была
написана Родом Джонсоном,
который впервые
опубликовал её вместе с
изданием своей книги
«Expert One-on-One Java EE
Design and Development»
(Wrox Press, октябрь 2002 года).
Spring история версий
Spring был впервые выпущен
под лицензией Apache 2.0
license в июне 2003 года.
Первый стабильный релиз 1.0
был выпущен в марте 2004.
Spring 2.0 был выпущен в
октябре 2006
Spring история версий
Spring 2.5 — в ноябре 2007,
Spring 3.0 в декабре 2009, и
Spring 3.1 в декабре 2011.
Текущая версия — 4.2.5.
Spring история версий
Spring Framework может
быть рассмотрен как
коллекция меньших
фреймворков или
фреймворков во
фреймворке.
Spring
Inversion of Control – это
конфигурирование
компонентов приложений
и управление жизненным
циклом Java-объектов.
Spring
Аспектно-ориентированное
программирование (AOP) -
работает с функциональностью,
которая не может быть
реализована возможностями
объектно-ориентированного
программирования на Java без
потерь.
Spring
Доступа к данным (Data Access)
работает с системами управления
реляционными базами данных на
Java-платформе, используя JDBC-
и ORM-средства и обеспечивая
решения задач, которые
повторяются в большом числе
Java-based environments.
Spring
Фреймворк управления
транзакциями (Trasactions)
координация различных API
управления транзакциями и
инструментарий настраиваемого
управления транзакциями для
объектов Java.
Spring
Фреймворк удалённого
доступа конфигурируемая
передача Java-объектов через
сеть в стиле RPC,
поддерживающая RMI, CORBA,
HTTP-based протоколы,
включая web-сервисы (SOAP).
Spring
Аутентификация и авторизация
конфигурируемый инструментарий
процессов аутентификации и
авторизации, поддерживающий много
популярных и ставших
индустриальными стандартами
протоколов, инструментов, практик
через дочерний проект Spring Security
(ранее известный как Acegi).
Spring
Удалённое управление
конфигурируемое
представление и управление
Java-объектами для локальной
или удалённой конфигурации с
помощью JMX.
Spring
Работа с сообщениями
конфигурируемая регистрация
объектов-слушателей сообщений
для прозрачной обработки
сообщений из очереди сообщений
с помощью JMS, улучшенная
отправка сообщений по стандарту
JMS API.
Spring
Тестирование -
каркас, поддерживающий
классы для написания
модульных и
интеграционных тестов.
Spring
Фреймворк MVC
каркас, основанный на HTTP и
сервлетах, предоставляющий
множество возможностей для
расширения и настройки
(customization).
Spring
Большинство этих фреймворков
может работать независимо
друг от друга, однако они
обеспечивают большую
функциональность при
совместном их использовании.
Spring Web
Spring Web Flow (SWF) - это
суб-проект Spring Framework,
целью которого является
предоставление
инфраструктуры для разработки
веб-приложений со сложной
структурой.
Spring Web
Цели:
 описать правила навигации
по страницам
 управлять состояниями
навигации
 облегчить повторное
использование кода
Inversion of Control (IoC)
Инверсия управления - это
принцип объектно-
ориентированного
программирования, который
служит для уменьшения
связанности слоёв сложных
приложений.
Inversion of Control (IoC)
Принцип заключается в том что
каждый слой приложение
работает с нижестоящим слоем
не на прямую, а опосредованно
(через слой абстракций).
Inversion of Control (IoC)
В результате это позволяет
легко и безболезненно
заменить реализацию
каждого из слоёв на новую,
при этом не затронув работу
вышестоящих слоёв.
Inversion of Control (IoC)
В результате IoC позволяет
легко и безболезненно
заменить реализацию каждого
из слоёв на новую, при этом не
затронув работу вышестоящих
слоёв.
IoC vs DI
В 2004 году Мартин Фаулер в
предложил уйти от термина
Inversion of Control (IoC) в пользу
Dipendancy Injection (DI),
мотивируя это тем, что термин IoC
слишком общий и вызывает
проблемы в осознании
происходящего.
Dipendency Injection (DI)
Dipendency Injection (DI) – это
шаблон проектирования
позволяющий разработчикам
«развязать» (decouple)
компоненты их приложения, тем
самым ослабив связи между
ними.
Dipendency Injection (DI)
Constructor Injection —
внедрение через конструктор
Setter Injection — внедрение
через сетторы
Method Injection —
внедрение через гетторы
Spring – „контекст“ (context).
Контекст – это среда, в которой
существует объект.
Объект – это разрабатываемая
компонента (javaBean), а среда –
все остальные компоненты (beans),
необходимые для жизненного
цикла вашей компоненты.
Spring – „контекст“ (context).
Например, контроллер,
позволяющий отправить
клиенту сообщение по почте, в
данном случае является
объектом, а сам мэйлер и логер
– являются средой окружения.
Spring – „контекст“ (context).
Описание набора
компонент (beans) и
взаимосвязей между ними
и является контекстом
приложения (application
context).
Spring – „контекст“ (context).
Для разработчика, использующего
Spring Framework - Application
Context представляет собой набор
xml – файлов и аннотаций,
описывающий компоненты (beans)
и взаимосвязи между ними.
Spring MVC
Spring MVC построен вокруг
центрального сервлета
(DispatcherServlet ), который
распределяет запросы по
контроллерам, а также
предоставляет другие широкие
возможности при разработке веб
приложений.
DispatcherServlet
DispatcherServlet — это
обычный сервлет (наследуется
от базового класса HttpServlet).
Данный сервлет необходимо
описывать в web.xml вашего
веб приложения.
Spring MVC
Spring MVC
DispatcherServlet (диспетчер
сервлетов) получает запрос,
далее он смотрит свои
настройки, чтобы понять какой
контроллер использовать (на
рисунке Handler Mapping).
Запрос передается в
Controller, где происходит
обработка запроса и
обратно посылается
ModelAndView
DispatcherServlet на основании
полученного ModelAndView
ищет какое представление ему
использовать (View Resolver) и
получает в ответе имя
представления View
В представление
передаются данные
(model) и обратно, если
необходимо,
посылается ответ от
представления.
Основы шаблона Spring MVC
Model — представление
данных, сами данные
View — представление, вид,
отображение
Controller — управление, связь
между моделью и видом.
Жизненный цикл запроса в Spring MVC
Controller
Аннотация @Controller служит
для сообщения Spring'у о том,
что данный класс является
bean'ом и его необходимо
подгрузить при старте
приложения.
Controller
@RequestMapping(value =
"/simple1") служит для указания, что
данный контроллер будет
обрабатывать запрос, URI которого
"/simple1"
Controller
@Controller
public class SimpleController {
@RequestMapping(value = "/simple1")
public String simple1() {
return "simple";
}
}
simple — сообщение фронт контролеру
Controller
@Controller
public class SimpleController {
@RequestMapping(value = "/simple2")
public ModelAndView simple2() {
ModelAndView mav = new ModelAndView();
mav.setViewName("simple");
return mav;
}
}
ModelAndView, агрегирует все параметры модели и имя
отображения
Controller
Аннотации @RequestMapping в
классе. Все методы будут получать
запросы с URI, который будет
начинатся строкой, указанной в
аннотации @RequestMapping перед
объявлением класса контроллера.
Controller
@PathVariable - автозаполнения
переменной из пути (url) запроса.
Controller
@RequestMapping(value = "/test",
method = RequestMethod.GET)
@RequestMapping(value = "/test",
method = RequestMethod.POST)
URI в стиле Ant
@RequestMapping(value =
"/antstyle/*/hi")
public String antStyle() {
return ANT_STYLE_VIEW_NAME;
}
будет обрабатывать и запрос /antstyle/a/hi, и
/antstyle/b/hi, и /antstyle/abracadabra/hi, благодаря
использованию символа '*'.
WebRequest
@RequestMapping(value = "/webrequest")
public String webRequest(WebRequest webRequest,
Model model) {
model.addAttribute("content", "Session id
(WebRequest): " + webRequest.getSessionId() );
return "test";
}
Locale
@RequestMapping(value = "/webrequest")
public String webRequest(WebRequest
webRequest, Model model) {
model.addAttribute("content", "Session id
(WebRequest): " + webRequest.getSessionId() );
return "test";
}
@RequestParam
@RequestMapping(value = "/requestparam")
public String
requestParam(@RequestParam("foo") int foo,
Model model) {
model.addAttribute("content", "foo=" + foo );
return OTHER_VIEW_NAME;
}
@RequestParam
@RequestMapping(value = "/responsebody")
@ResponseBody
public String responseBody() {
return "Hello World";
}
Этой аннотацией мы отдает ответ
непосредственно браузеру, минуя слой
представлений. То есть, то, что отдаем в
методе, то и получит браузер.
@CookieValue
@RequestMapping(value = "/cookie", method =
RequestMethod.GET)
public String cookie(@CookieValue("JSESSIONID")
String jsessionid, Model model) {
model.addAttribute("msg", "JSESSIONID: " +
jsessionid );
return "info";
}
Аннотация @CookieValue позволяет привязать
параметр метода контролера к HTTP-cookie.
@Autowired
Используя аннотацию @Autowired,
не нужно заботиться о том, как
лучше всего передать классу или
bean'у экземпляр другого bean'a.
Фреймворк Spring сам найдет
нужный bean и подставит его
значение в свойство, которое
отмечено данной аннотацией.
@Autowired
Атрибут equire=false сообщает
фреймворку о том, что наличие
соответствующего bean'а не
является обязательным при
компиляции программы
@Qualifier
@Qualifier указывае
конкретного кандидата для
автозаполнения если есть
несколько кандидатов.
@Qualifier
@Qualifier указывае конкретного
кандидата для автозаполнения
если кандидатов несколько.
@Autowired
@Qualifier("fooService2")
private FooService fooService;
@Component
@Component - аннотация для
любого компонента
фреймворка.
@Service
@Service - (Сервис-слой
приложения) - аннотация
объявляющая, что этот класс
представляет собой сервис –
компонент сервис-слоя.
Сервис является подтипом класса @Component.
Использование данной аннотации позволит
искать бины-сервисы автоматически.
@Repository
@Repository - (Доменный
слой) Аннотация показывает,
что класс функционирует как
репозиторий и требует
наличия прозрачной
трансляции исключений.
@RestController
@RestController - Аннотация
аккумулирует поведение двух
аннотаций @Controller и
@ResponseBody
@Transactional
@Transactional - перед
исполнением метода помеченного
данной аннотацией начинается
транзакция, после выполнения
метода транзакция коммитится, при
выбрасывании любого
RuntimeException откатывается.
@Autowired
@Autowired - аннотация
позволяет автоматически
установить значение поля и
связывать бины.
@Scope
@Scope — служит для указания
области видимости бина.
Пример:
@Service
@Scope("prototype")
public class UserService
Области видимости бинов
singleton - Возвращает один и
тот же экземпляр бина на
каждый запрос контейнера
Spring IoC (по умолчанию).
prototype - Создает и
возвращает новый экземпляр
бина на каждый запрос.
Области видимости бинов
request - создает и
возвращает экземпляр бина
на каждый HTTP запрос*.
session - создает и
возвращает экземпляр бина
для каждой HTTP сессии.
Области видимости бинов
global-session - Создает и возвращает
экземпляр бина для глобальной HTTP
сессии.
application - Жизненный цикл
экземпляра ограничен в пределах
ServletContext. Действует, только если
вы используете web-aware
ApplicationContext
Жизненный цикл сбина
Жизненный цикл Spring бина —
время существование класса.
Spring бины инициализируются
при инициализации Spring
контейнера. Когда контейнер
уничтожается, уничтожаются и
все бины.

Contenu connexe

Similaire à 08-170327133157.pdf

Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha DmitryUafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha DmitryMax Rozdobudko
 
Средства разработки web приложений (Web frameworks)
Средства разработки web приложений
(Web frameworks)Средства разработки web приложений
(Web frameworks)
Средства разработки web приложений (Web frameworks)Fedor Malyshkin
 
Meeting #4. Frameworks.
Meeting #4. Frameworks.Meeting #4. Frameworks.
Meeting #4. Frameworks.Igor Khrol
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.Igor Shkulipa
 
Как пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftКак пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftAnton Loginov
 
Стандарты и соглашения в сложных ООП-приложениях
Стандарты и соглашения в сложных ООП-приложенияхСтандарты и соглашения в сложных ООП-приложениях
Стандарты и соглашения в сложных ООП-приложенияхMagecom Ukraine
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NETVitaly Baum
 
Мировые информационные ресурсы. Лекция 5
Мировые информационные ресурсы. Лекция 5Мировые информационные ресурсы. Лекция 5
Мировые информационные ресурсы. Лекция 5Dmitriy Krukov
 
Разработка Enterprise-приложения на основе Spring Framework
Разработка Enterprise-приложения на основе Spring FrameworkРазработка Enterprise-приложения на основе Spring Framework
Разработка Enterprise-приложения на основе Spring FrameworkCUSTIS
 
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKПрограммируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKCisco Russia
 
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.jsОмские ИТ-субботники
 
Enterpise&Webservices
Enterpise&WebservicesEnterpise&Webservices
Enterpise&Webservicesscassau
 
Ruby On Rails: Web-разработка по-другому!
Ruby On Rails: Web-разработка по-другому!Ruby On Rails: Web-разработка по-другому!
Ruby On Rails: Web-разработка по-другому!Constantin Kichinsky
 

Similaire à 08-170327133157.pdf (20)

Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha DmitryUafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
 
PureMVC and Papervision
PureMVC and PapervisionPureMVC and Papervision
PureMVC and Papervision
 
ASP.NET MVC: new era?
ASP.NET MVC: new era?ASP.NET MVC: new era?
ASP.NET MVC: new era?
 
Средства разработки web приложений (Web frameworks)
Средства разработки web приложений
(Web frameworks)Средства разработки web приложений
(Web frameworks)
Средства разработки web приложений (Web frameworks)
 
Symfony 3
Symfony 3Symfony 3
Symfony 3
 
Meeting #4. Frameworks.
Meeting #4. Frameworks.Meeting #4. Frameworks.
Meeting #4. Frameworks.
 
RichFaces: обзор
RichFaces: обзорRichFaces: обзор
RichFaces: обзор
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.
 
ASP.NET MVC 3
ASP.NET MVC 3ASP.NET MVC 3
ASP.NET MVC 3
 
Как пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftКак пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на Swift
 
Стандарты и соглашения в сложных ООП-приложениях
Стандарты и соглашения в сложных ООП-приложенияхСтандарты и соглашения в сложных ООП-приложениях
Стандарты и соглашения в сложных ООП-приложениях
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NET
 
Мировые информационные ресурсы. Лекция 5
Мировые информационные ресурсы. Лекция 5Мировые информационные ресурсы. Лекция 5
Мировые информационные ресурсы. Лекция 5
 
Разработка Enterprise-приложения на основе Spring Framework
Разработка Enterprise-приложения на основе Spring FrameworkРазработка Enterprise-приложения на основе Spring Framework
Разработка Enterprise-приложения на основе Spring Framework
 
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKПрограммируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
 
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
 
Enterpise&Webservices
Enterpise&WebservicesEnterpise&Webservices
Enterpise&Webservices
 
Ruby On Rails: Web-разработка по-другому!
Ruby On Rails: Web-разработка по-другому!Ruby On Rails: Web-разработка по-другому!
Ruby On Rails: Web-разработка по-другому!
 
JDBC
JDBCJDBC
JDBC
 

Plus de ssuser0562f1

Алгоритмизация и программирование С/С++
Алгоритмизация и  программирование С/С++Алгоритмизация и  программирование С/С++
Алгоритмизация и программирование С/С++ssuser0562f1
 
Algorithms and programming lecture in ru
Algorithms and programming lecture in ruAlgorithms and programming lecture in ru
Algorithms and programming lecture in russuser0562f1
 
Geometry algorithms and formulas calculation
Geometry algorithms and formulas calculationGeometry algorithms and formulas calculation
Geometry algorithms and formulas calculationssuser0562f1
 
Algorithms in number theory presentation
Algorithms in number theory presentationAlgorithms in number theory presentation
Algorithms in number theory presentationssuser0562f1
 
Курсовая (1).pdf
Курсовая (1).pdfКурсовая (1).pdf
Курсовая (1).pdfssuser0562f1
 
springdatajpatwjug-120527215242-phpapp02.pdf
springdatajpatwjug-120527215242-phpapp02.pdfspringdatajpatwjug-120527215242-phpapp02.pdf
springdatajpatwjug-120527215242-phpapp02.pdfssuser0562f1
 
springdatajpa-up.pdf
springdatajpa-up.pdfspringdatajpa-up.pdf
springdatajpa-up.pdfssuser0562f1
 

Plus de ssuser0562f1 (12)

Алгоритмизация и программирование С/С++
Алгоритмизация и  программирование С/С++Алгоритмизация и  программирование С/С++
Алгоритмизация и программирование С/С++
 
Algorithms and programming lecture in ru
Algorithms and programming lecture in ruAlgorithms and programming lecture in ru
Algorithms and programming lecture in ru
 
Geometry algorithms and formulas calculation
Geometry algorithms and formulas calculationGeometry algorithms and formulas calculation
Geometry algorithms and formulas calculation
 
Algorithms in number theory presentation
Algorithms in number theory presentationAlgorithms in number theory presentation
Algorithms in number theory presentation
 
jpa_nus.pdf
jpa_nus.pdfjpa_nus.pdf
jpa_nus.pdf
 
0808.pdf
0808.pdf0808.pdf
0808.pdf
 
Курсовая (1).pdf
Курсовая (1).pdfКурсовая (1).pdf
Курсовая (1).pdf
 
springdatajpatwjug-120527215242-phpapp02.pdf
springdatajpatwjug-120527215242-phpapp02.pdfspringdatajpatwjug-120527215242-phpapp02.pdf
springdatajpatwjug-120527215242-phpapp02.pdf
 
springdatajpa-up.pdf
springdatajpa-up.pdfspringdatajpa-up.pdf
springdatajpa-up.pdf
 
waits.pdf
waits.pdfwaits.pdf
waits.pdf
 
waits.pdf
waits.pdfwaits.pdf
waits.pdf
 
geometry.pdf
geometry.pdfgeometry.pdf
geometry.pdf
 

08-170327133157.pdf

  • 2. Spring Spring Framework (или коротко Spring) — универсальный фреймворк с открытым исходным кодом для Java EE платформы.
  • 3. Spring Spring Framework обеспечивает решения многих задач, с которыми сталкиваются Java разработчики и организации, которые хотят создать информационную систему, основанную на платформе Java.
  • 4. Spring Spring Framework не полностью связан с платформой Java EE, но имеет масштабную интеграцию с ней, что является важной причиной его популярности.
  • 5. Spring история Первая версия была написана Родом Джонсоном, который впервые опубликовал её вместе с изданием своей книги «Expert One-on-One Java EE Design and Development» (Wrox Press, октябрь 2002 года).
  • 6. Spring история версий Spring был впервые выпущен под лицензией Apache 2.0 license в июне 2003 года. Первый стабильный релиз 1.0 был выпущен в марте 2004. Spring 2.0 был выпущен в октябре 2006
  • 7. Spring история версий Spring 2.5 — в ноябре 2007, Spring 3.0 в декабре 2009, и Spring 3.1 в декабре 2011. Текущая версия — 4.2.5.
  • 8. Spring история версий Spring Framework может быть рассмотрен как коллекция меньших фреймворков или фреймворков во фреймворке.
  • 9.
  • 10. Spring Inversion of Control – это конфигурирование компонентов приложений и управление жизненным циклом Java-объектов.
  • 11. Spring Аспектно-ориентированное программирование (AOP) - работает с функциональностью, которая не может быть реализована возможностями объектно-ориентированного программирования на Java без потерь.
  • 12. Spring Доступа к данным (Data Access) работает с системами управления реляционными базами данных на Java-платформе, используя JDBC- и ORM-средства и обеспечивая решения задач, которые повторяются в большом числе Java-based environments.
  • 13. Spring Фреймворк управления транзакциями (Trasactions) координация различных API управления транзакциями и инструментарий настраиваемого управления транзакциями для объектов Java.
  • 14. Spring Фреймворк удалённого доступа конфигурируемая передача Java-объектов через сеть в стиле RPC, поддерживающая RMI, CORBA, HTTP-based протоколы, включая web-сервисы (SOAP).
  • 15. Spring Аутентификация и авторизация конфигурируемый инструментарий процессов аутентификации и авторизации, поддерживающий много популярных и ставших индустриальными стандартами протоколов, инструментов, практик через дочерний проект Spring Security (ранее известный как Acegi).
  • 16. Spring Удалённое управление конфигурируемое представление и управление Java-объектами для локальной или удалённой конфигурации с помощью JMX.
  • 17. Spring Работа с сообщениями конфигурируемая регистрация объектов-слушателей сообщений для прозрачной обработки сообщений из очереди сообщений с помощью JMS, улучшенная отправка сообщений по стандарту JMS API.
  • 18. Spring Тестирование - каркас, поддерживающий классы для написания модульных и интеграционных тестов.
  • 19. Spring Фреймворк MVC каркас, основанный на HTTP и сервлетах, предоставляющий множество возможностей для расширения и настройки (customization).
  • 20. Spring Большинство этих фреймворков может работать независимо друг от друга, однако они обеспечивают большую функциональность при совместном их использовании.
  • 21. Spring Web Spring Web Flow (SWF) - это суб-проект Spring Framework, целью которого является предоставление инфраструктуры для разработки веб-приложений со сложной структурой.
  • 22. Spring Web Цели:  описать правила навигации по страницам  управлять состояниями навигации  облегчить повторное использование кода
  • 23. Inversion of Control (IoC) Инверсия управления - это принцип объектно- ориентированного программирования, который служит для уменьшения связанности слоёв сложных приложений.
  • 24. Inversion of Control (IoC) Принцип заключается в том что каждый слой приложение работает с нижестоящим слоем не на прямую, а опосредованно (через слой абстракций).
  • 25. Inversion of Control (IoC) В результате это позволяет легко и безболезненно заменить реализацию каждого из слоёв на новую, при этом не затронув работу вышестоящих слоёв.
  • 26. Inversion of Control (IoC) В результате IoC позволяет легко и безболезненно заменить реализацию каждого из слоёв на новую, при этом не затронув работу вышестоящих слоёв.
  • 27. IoC vs DI В 2004 году Мартин Фаулер в предложил уйти от термина Inversion of Control (IoC) в пользу Dipendancy Injection (DI), мотивируя это тем, что термин IoC слишком общий и вызывает проблемы в осознании происходящего.
  • 28. Dipendency Injection (DI) Dipendency Injection (DI) – это шаблон проектирования позволяющий разработчикам «развязать» (decouple) компоненты их приложения, тем самым ослабив связи между ними.
  • 29. Dipendency Injection (DI) Constructor Injection — внедрение через конструктор Setter Injection — внедрение через сетторы Method Injection — внедрение через гетторы
  • 30. Spring – „контекст“ (context). Контекст – это среда, в которой существует объект. Объект – это разрабатываемая компонента (javaBean), а среда – все остальные компоненты (beans), необходимые для жизненного цикла вашей компоненты.
  • 31. Spring – „контекст“ (context). Например, контроллер, позволяющий отправить клиенту сообщение по почте, в данном случае является объектом, а сам мэйлер и логер – являются средой окружения.
  • 32. Spring – „контекст“ (context). Описание набора компонент (beans) и взаимосвязей между ними и является контекстом приложения (application context).
  • 33. Spring – „контекст“ (context). Для разработчика, использующего Spring Framework - Application Context представляет собой набор xml – файлов и аннотаций, описывающий компоненты (beans) и взаимосвязи между ними.
  • 34. Spring MVC Spring MVC построен вокруг центрального сервлета (DispatcherServlet ), который распределяет запросы по контроллерам, а также предоставляет другие широкие возможности при разработке веб приложений.
  • 35. DispatcherServlet DispatcherServlet — это обычный сервлет (наследуется от базового класса HttpServlet). Данный сервлет необходимо описывать в web.xml вашего веб приложения.
  • 37. Spring MVC DispatcherServlet (диспетчер сервлетов) получает запрос, далее он смотрит свои настройки, чтобы понять какой контроллер использовать (на рисунке Handler Mapping). Запрос передается в Controller, где происходит обработка запроса и обратно посылается ModelAndView DispatcherServlet на основании полученного ModelAndView ищет какое представление ему использовать (View Resolver) и получает в ответе имя представления View В представление передаются данные (model) и обратно, если необходимо, посылается ответ от представления.
  • 38. Основы шаблона Spring MVC Model — представление данных, сами данные View — представление, вид, отображение Controller — управление, связь между моделью и видом.
  • 40. Controller Аннотация @Controller служит для сообщения Spring'у о том, что данный класс является bean'ом и его необходимо подгрузить при старте приложения.
  • 41. Controller @RequestMapping(value = "/simple1") служит для указания, что данный контроллер будет обрабатывать запрос, URI которого "/simple1"
  • 42. Controller @Controller public class SimpleController { @RequestMapping(value = "/simple1") public String simple1() { return "simple"; } } simple — сообщение фронт контролеру
  • 43. Controller @Controller public class SimpleController { @RequestMapping(value = "/simple2") public ModelAndView simple2() { ModelAndView mav = new ModelAndView(); mav.setViewName("simple"); return mav; } } ModelAndView, агрегирует все параметры модели и имя отображения
  • 44. Controller Аннотации @RequestMapping в классе. Все методы будут получать запросы с URI, который будет начинатся строкой, указанной в аннотации @RequestMapping перед объявлением класса контроллера.
  • 46. Controller @RequestMapping(value = "/test", method = RequestMethod.GET) @RequestMapping(value = "/test", method = RequestMethod.POST)
  • 47. URI в стиле Ant @RequestMapping(value = "/antstyle/*/hi") public String antStyle() { return ANT_STYLE_VIEW_NAME; } будет обрабатывать и запрос /antstyle/a/hi, и /antstyle/b/hi, и /antstyle/abracadabra/hi, благодаря использованию символа '*'.
  • 48. WebRequest @RequestMapping(value = "/webrequest") public String webRequest(WebRequest webRequest, Model model) { model.addAttribute("content", "Session id (WebRequest): " + webRequest.getSessionId() ); return "test"; }
  • 49. Locale @RequestMapping(value = "/webrequest") public String webRequest(WebRequest webRequest, Model model) { model.addAttribute("content", "Session id (WebRequest): " + webRequest.getSessionId() ); return "test"; }
  • 50. @RequestParam @RequestMapping(value = "/requestparam") public String requestParam(@RequestParam("foo") int foo, Model model) { model.addAttribute("content", "foo=" + foo ); return OTHER_VIEW_NAME; }
  • 51. @RequestParam @RequestMapping(value = "/responsebody") @ResponseBody public String responseBody() { return "Hello World"; } Этой аннотацией мы отдает ответ непосредственно браузеру, минуя слой представлений. То есть, то, что отдаем в методе, то и получит браузер.
  • 52. @CookieValue @RequestMapping(value = "/cookie", method = RequestMethod.GET) public String cookie(@CookieValue("JSESSIONID") String jsessionid, Model model) { model.addAttribute("msg", "JSESSIONID: " + jsessionid ); return "info"; } Аннотация @CookieValue позволяет привязать параметр метода контролера к HTTP-cookie.
  • 53. @Autowired Используя аннотацию @Autowired, не нужно заботиться о том, как лучше всего передать классу или bean'у экземпляр другого bean'a. Фреймворк Spring сам найдет нужный bean и подставит его значение в свойство, которое отмечено данной аннотацией.
  • 54. @Autowired Атрибут equire=false сообщает фреймворку о том, что наличие соответствующего bean'а не является обязательным при компиляции программы
  • 55. @Qualifier @Qualifier указывае конкретного кандидата для автозаполнения если есть несколько кандидатов.
  • 56. @Qualifier @Qualifier указывае конкретного кандидата для автозаполнения если кандидатов несколько. @Autowired @Qualifier("fooService2") private FooService fooService;
  • 57. @Component @Component - аннотация для любого компонента фреймворка.
  • 58. @Service @Service - (Сервис-слой приложения) - аннотация объявляющая, что этот класс представляет собой сервис – компонент сервис-слоя. Сервис является подтипом класса @Component. Использование данной аннотации позволит искать бины-сервисы автоматически.
  • 59. @Repository @Repository - (Доменный слой) Аннотация показывает, что класс функционирует как репозиторий и требует наличия прозрачной трансляции исключений.
  • 60. @RestController @RestController - Аннотация аккумулирует поведение двух аннотаций @Controller и @ResponseBody
  • 61. @Transactional @Transactional - перед исполнением метода помеченного данной аннотацией начинается транзакция, после выполнения метода транзакция коммитится, при выбрасывании любого RuntimeException откатывается.
  • 62. @Autowired @Autowired - аннотация позволяет автоматически установить значение поля и связывать бины.
  • 63. @Scope @Scope — служит для указания области видимости бина. Пример: @Service @Scope("prototype") public class UserService
  • 64. Области видимости бинов singleton - Возвращает один и тот же экземпляр бина на каждый запрос контейнера Spring IoC (по умолчанию). prototype - Создает и возвращает новый экземпляр бина на каждый запрос.
  • 65. Области видимости бинов request - создает и возвращает экземпляр бина на каждый HTTP запрос*. session - создает и возвращает экземпляр бина для каждой HTTP сессии.
  • 66. Области видимости бинов global-session - Создает и возвращает экземпляр бина для глобальной HTTP сессии. application - Жизненный цикл экземпляра ограничен в пределах ServletContext. Действует, только если вы используете web-aware ApplicationContext
  • 67. Жизненный цикл сбина Жизненный цикл Spring бина — время существование класса. Spring бины инициализируются при инициализации Spring контейнера. Когда контейнер уничтожается, уничтожаются и все бины.