Что такое фреймворк в java
Фреймворки позволяют строить приложения быстро, просто и эффективно, а также использовать готовые фрагменты кода, избавляя от необходимости писать его с нуля. Их выбор из всего многообразия зависит от потребностей конкретного проекта. Ресурс Technotification подготовил подборку из 10 фреймворков для Java-программистов и разработчиков.
Фреймворки позволяют строить приложения быстро, просто и эффективно, а также использовать готовые фрагменты кода, избавляя от необходимости писать его с нуля. Их выбор из всего многообразия зависит от потребностей конкретного проекта. Ресурс Technotification подготовил подборку из 10 фреймворков для Java-программистов и разработчиков.
Содержание
1. Spring Framework
Spring — один из самых популярных Java-фреймворков. Его предпочитает большинство разработчиков на этом языке, в том числе благодаря возможности внедрения зависимостей.
Spring идеально подходит для создания корпоративных приложений и моделей конфигурации на базе Java. Он позволяет разработчикам сосредоточиться на бизнес-логике приложения. Близко связан с фреймворком Spring Boot.
2. PrimeFaces
PrimeFaces относится к лучшим лёгким Java-фреймворком. Его можно скачать в одном.jar-файле. PriemFaces существует уже много лет и служит UI-фреймворком для спецификаций JavaServer Faces и Java EE. Также он насчитывает более 100 компонентов, среди ключевых — валидация на стороне клиента и инструментарий для сенсорных смартфонов.
3. Blade
Blade — это легковесный MVC-фреймворк на базе Java 8. Он прост и включает интерфейс маршрутизатора в стиле RESTful. Также он относится к тем немногим Java-фреймворкам, в которых отсутствуют навязчивые перехватчики. Под «легковесностью» имеется в виду небольшой по объёму исходный код, который не превышает 500 Кб.
Для использования Blade понадобится создать типичный Maven-проект. Фреймворк поддерживает модульность в Java 9, а также большое число веб-компонентов Java.
Онлайн-курсы, чтобы стать крутым Java-разработчиком
4. Dropwizard
Dropwizard помогает достичь максимальной продуктивности при разработке. Приятный бонус — понятная для новичков документация.
5. Google Web Toolkit (GWT)
Фреймворк Google Web Toolkit выпущен Google с целью помочь разработчикам в написании веб-приложений на Java. Он даёт возможность писать Java-код и компилировать в JavaScript для запуска в браузерах.
GWT поддерживает команда опытных программистов Google. С помощью этого фреймворка можно создавать комплексные веб-приложения, не имея практического опыта с языками фронтенд-разработки, такими как JavaScript.
Фреймворк включает ряд уникальных функций, например абстракция UI, кросс‐браузерная совместимость и интернационализация.
6. JavaServer Faces (JSF)
MVC-фреймворк JavaServer Faces появился 14 лет назад. Он упрощает разработку пользовательских интерфейсов для веб-приложений. Самая замечательная особенность этого фреймворка в том, что построенные в нём UI-компоненты можно повторно использовать для других веб-страниц. В качестве шаблонов в JSF использует Facelets.
7. JHipster
JHipster — относительно молодой фреймворк, вышедший в 2013 году. Он сочетает Spring Boot, Angular и React в одном большом фреймворке. С помощью него можно запросто построить современное веб-приложение на Java.
Интеграция Spring Boot позволяет создавать приложения на базе фреймворка Spring. Помимо Angular и React, JHipster также использует Bootstrap. Кроме того, JHipster предоставляет два вида архитектур: монолитную или микросервисную. В первом случае фронтенд и бэкенд реализованы в едином приложении, во втором — раздельно.
8. Spark Framework
Spark — оптимальный выбор для программистов, разрабатывающих веб-приложения на Java. В нём можно быстро и без усилий строить бэкенд сайтов. Spark поддерживает практически все функции Java 8 и имеет выразительный API.
9. MyBatis
MyBatis фреймворк для осуществления маппинга между Java-приложениями и базами данных SQL. Обычно для подключения приложения к реляционной БД необходим API Java Database Connectivity. Он позволяет разработчикам выполнять крупные SQL-операции за несколько строчек кода.
MyBatis сравнивают с фреймворком Hibernate, так как оба являются посредниками между приложением и базой данных. Единственное отличие в том, что MyBatis не делает маппинг объектов Java в реляционную БД.
10. Play Framework
Play — ещё один лёгкий Java-фреймворк, завоевавший расположение большинства разработчиков. Он предоставляет интерфейс, через который можно реализовывать изменения в коде без необходимости заново развёртывать или компилировать его.
Фреймворк имеет асинхронные API, которые позволяют разработчикам масштабировать приложения, обходясь без дополнительных ресурсов. Play прекрасно поддерживает различные микросервисные паттерны.
Для ускорения процесса разработки java-приложения широко используют библиотеки (java library) и фреймворки (java framework). С точки зрения Java библиотека представляет собой файл jar, используемый для определения бизнес-логики программы и построения интерфейсной части. Библиотеку необходимо определенным образом прописать в CLASSPATH и подключить к приложению.
Фреймворк (framework) в переводе с английского означает каркас (структура). Java framework — это программная платформа, определяющая архитектуру построения приложения и облегчающее разработку и объединение разных компонентов большого программного проекта.
Использование java фреймворка в разработке web-приложения является каркасным подходом к архитектуре программы, где любая конфигурация программы состоит из двух частей: постоянная часть (каркас приложения), не меняющийся от конфигурации к конфигурации, и переменная часть — сменные модули, определяющие бизнес-логику и интерфейс приложения.
Различие между библиотекой и фреймворком
Основное отличие фреймворка от библиотеки заключается в том, что java библиотека может быть использована в приложении как набор подпрограмм близкой функциональности, не влияя на архитектуру программного продукта и не накладывая на неё никаких ограничений. В то время как java framework определяет правила построения архитектуры приложения, задавая на начальном этапе разработки поведение по умолчанию. Также фреймворк может взаимодействовать с большим числом разных по тематике библиотек.
Другое ключевое отличие фреймворка от библиотеки заключается в инверсии управления. Так при обращении к библиотеке управление получает один из методов класса после вызова. Во фреймворке пользовательский код может реализовывать конкретное поведение, встраиваемое в более общий, абстрактный код фреймворка. При этом фреймворк вызывает функции класса пользовательского кода.
Web framework JSF (Java Server Faces) написан на Java и предназначени для web-приложений. Он существенно облегчает разработку пользовательских интерфейсов для Java EE приложений. Данный web framework основывается на использовании компонентов в отличие от прочих MVC-фреймворков, которые управляются запросами. При использовании классов JavaBean состоянием визуальных компонентов можно управлять : сохранить значение при переходе пользователя на другую страницу, и затем восстанавить, при возвращении назад.
Широкое распространение для формирования интерфейса в JSF получили технологии JSP и Facelets.
Платформа Java Server Faces включает:
- набор API для :
- представления компонент пользовательского интерфейса и управления их состоянием,
- обработки событий,
- валидации поступаемой информации,
- определения правил навигации,
- поддержки интернационализации (i18n),
- поддержки доступности (accessibility).
В последнем на данный момент релизе JSF 2.2 от 21.05.2013 выполнена поддержка различных атрибутов HTML 5 и объединение с Java EE 7. В JSF 2.0 в качестве обработчика представления используется технология Facelets которая пришла на замену JSP.
Подробное описание web framework'а JSF представлено в разделе WEB технологии.
Web framework Struts2 поставляется с открытым исходным кодом и предназначен для создания WEB-приложений в технологии Java2EE. Основой Struts является Java Servlet API, который он расширяет. В архитектурном плане данный фреймворк реализует, или, точнее, дает возможность реализовать шаблоный подход MVC. Struts2 имеется чёткое разделение моделей бизнес-логики, представления HTML-страницы и контроллера, отвечающего за передачу данных от модели к представлению и обратно.
Framework Struts2 включает стандартный контроллер — сервлет ActionServlet и различные средства для управления страницами представления (действия, интерцепторы). Разработчик приложения отвечает за написание кода модели и формирование конфигурационного файла struts-config.xml, который связывает воедино модель, представление и контроллер.
Запросы из браузера поступают на сервер (контроллер) в виде «action» (действия), определённых в конфигурационном файле. Когда контроллер получает запрос, он передаёт его соответствующему action-классу. Последний взаимодействует с кодом модели и, согласно правилам навигации, определяет страницу для отправления клиенту. Информация передаётся между моделью и представлением в виде особых JavaBeans. Богатая библиотека тегов позволяет получать данные из бинов и записывать их без Java-кода.
Web framework Struts2 поддерживает интернационализацию i18n, облегчает валидацию данных полученных из веб-формы и предоставляет механизм использования шаблонов «tiles».
Struts2 не является доработкой предыдущей версии Struts, это абсолютно новый фреймворк построенный на основе Webwork с использованием Model-View-Controller (MVC).
Подробное описание web framework'а Struts2 представлено в разделе WEB технологии.
Фреймворк Google Web Toolkit, описание
Google Web Toolkit (GWT) — это свободный Java фреймворк, обеспечивающий WEB разработчикам создание Ajax-приложений. Основная особенность GWT - это компиляция исходного Java-приложения в JavaScript реализацию (при желании с обфускацией). Фреймворк позволяет почти всю разработку клиента и сервера реализовать на основе Java, и лишь на последнем этапе создать соответствующие JavaScript'ы.
Используя framework GWT, можно быстро разрабатывать и отлаживать AJAX приложения на языке Java с использованием инструментария отладки Java.
GWT включает XML парсер, поддерживает интернационализацию и интеграцию с JUnit, включает интерфейс для удаленного вызова процедур, содержит небольшой пакет виджетов для разработки элементов графического интерфейса пользователя (GUI). Большой набор визуальных компонентов типа GXT (Ext-GWT), SmartGWT позволяют существенно упростить и ускорить разработку интерфейсной части WEB-приложения.
IDE разработки WEB-приложений, как правило, имеют соответствующие плагины для работы с GWT. Отладка GWT-приложения разделена на две части. Отладка серверной части приложения осуществляется как отладка обычного Java WEB приложения. Для отладки же клиентской части понадобится gwt dev-plugin для браузера.
Подробное описание фреймворка GWT с инcталляцией плагина GWT SDK в IDE Eclipse представлено на странице Фреймворк GWT.
Несмотря на то, что Spring не обеспечивает какую-либо конкретную модель программирования, он получил широкое распространёние в Java-сообществе главным образом как альтернатива и замена модели Enterprise JavaBeans.
Spring был выпущен под лицензией Apache 2.0 license в июне 2003 года. Релиз Spring 3.1 вышел в декабре 2011. Текущая версия — 4.2.
Spring обеспечивает бо́льшую свободу в проектировании; кроме того, он предоставляет хорошо документированные и лёгкие в использовании средства решения проблем, возникающие при создании приложений корпоративного масштаба.
Особенности ядра Spring позволяют использовать его в любом Java-приложении. Существует множество расширений и усовершенствований для построения WEB приложений на платформе Java Enterprise Edition. По этим причинам Spring приобрёл большую популярность и признаётся разработчиками как стратегически важный фреймворк.
Наиболее известен Spring как источник расширений функциональности (свойств), нужных для эффективной разработки сложных бизнес-приложений вне тяжеловесных программных моделей. Этот фреймворк предлагает последовательную модель и делает её применимой к большинству типов приложений, которые уже созданы на основе платформы Java. Считается, что Spring реализует модель разработки, основанную на лучших стандартах индустрии, и делает её доступной во многих областях Java.
Более подробно с описанием Spring можно познакомиться на странице Википедии.
Библиотека Hibernate, описание
Библиотека Hibernate предназначена для решения задач объектно-реляционного отображения (object-relational mapping — ORM) при программировании на Java. Она относится к свободно программному обеспечению с открытым исходным кодом (open source), распространяемое на условиях GNU Lesser General Public License.
Hibernate предоставляет легкий в использовании каркас для работы с объектно-ориентированной моделью данных в традиционных реляционных СУБД. Библиотеку можно использовать как в процессе проектирования системы классов и таблиц «с нуля», так и для работы с уже существующей базой данных.
Hibernate не только обеспечивает связь между классами Java и таблицами базы данных, а также соответствие типов данных Java с типами данных SQL, но также предоставляет средства для автоматической генерации и обновления набора таблиц, построения запросов и обработки полученных данных. Таким образом, библиотека позволяет значительно уменьшить время разработки, которое обычно тратится на ручное написание SQL-запросов с использованием JDBC-кода.
Одним из основных достоинств Hibernate является автоматическая генерация SQL-запросов и обработка результирующего набора данных по преобразованию объектов (сериализация объектов), максимально облегчая перенос (портирование) приложения на любые базы данных SQL. То есть, Hibernate обеспечивает прозрачную поддержку сохранности данных (persistence) для «POJO» (Plain Old Java Object). POJO класс Java содержит только поля, без дополнительной логики их обработки, и доступ ко всем полям осуществляется только через методы get/set. Пример простого класса POJO приведен на странице описания компонента JavaBean.
Более подробное описание библиотеки Hibernate с инcталляцией плагина Hibernate Tools в IDE Eclipse представлено на странице Библиотека Hibernate.
Библиотека Swing предназначениа для создания графического интерфейса desktop'ых приложений, разрабатываемых на языке Java. Swing был создан компанией Sun Microsystems и содержит ряд графических компонентов (widget), таких как кнопки, поля ввода, таблицы и т.д.
Swing относится к библиотеке классов JFC (Java Foundation Classes), которая представляет собой набор библиотек для разработки графических оболочек. В состав JFC входят, в частности, библиотека Java 2D и первая библиотека Java для создания пользовательских интерфейсов AWT (Abstract Window Toolkit).
Начиная с версии Java 1.2 (1998 год) Swing включён в Java Runtime Environment.
Look and Feel
Архитектура Swing разработана таким образом, что можно изменять «look and feel» (L&F) приложения. «Look» определяет внешний вид компонентов, а «Feel» — их поведение. JRE предоставляет следующие L&F:
- CrossPlatformLookAndFeel — родной для приложений Java L&F, иначе называется Metal; используется по умолчанию и обеспечивает стандартное поведение компонентов и их внешний вид, вне зависимости от платформы.
- SystemLookAndFeel — родной для системы L&F; системный L&F определяется во время выполнения. Для Windows используется «Windows» L&F, который имитирует особенности конкретной системы, на которой запущен. Для Linux и Solaris используется «GTK+», если установлен GTK+ 2.2 или более поздняя версия, в противном случае используется «Motif».
- Synth — это основа для создания собственных L&F.
- Multiplexing — предоставляет возможность использования различных L&F одновременно.
Таким образом, компоненты Swing поддерживают специфические динамически подключаемые виды и поведения (plugable look-and-feel), благодаря которым возможна адаптация интерфейса приложения к графическому интерфейсу платформы. То есть к компоненту можно динамически подключить другой, специфический для операционной системы. Таким образом, приложения, использующие Swing, могут выглядеть как "родные" приложения для данной операционной системы.
Сравнение с AWT
Swing предоставляет более гибкие интерфейсные компоненты, по сравнению с более ранней библиотекой AWT. В отличие от AWT, компоненты Swing разработаны для кросс-платформенной работы, в то время как компоненты AWT повторяют интерфейс исполняемой платформы без изменений.
AWT использует только стандартные элементы операционной системы (ОС) для отображения, то есть для каждого элемента создается отдельный объект ОС (окно), в связи с чем, AWT не позволяет создавать элементы произвольной формы (возможно использовать только прямоугольные компоненты). Элементы управления на основе AWT всегда отображаются поверх Swing-элементов, т.к. все Swing компоненты отображаются на поверхности контейнера.
Принцип Lightweight
Принцип «Lightweight» означает, что Swing компоненты прорисовываются самими компонентами в родительском окне (например, на JFrame), без использования компонентов операционной системы. В отличие от «тяжелых» компонентов AWT, Swing приложение может иметься только одно окно.
В приложении могут сочетаться компоненты Swing и AWT. Но это может порождать некоторые проблемы — в частности, компоненты AWT всегда перекрывают Swing элементы, а также закрывают собой всплывающие меню JPopupMenu и JComboBox. Для предотвращения этого, у данного типа компонентов имеются методы setLightWeightPopupEnabled (boolean), позволяющие запретить использование «легковесных» всплывающих элементов. При установке данного свойства в true AWT элементы не будут перекрывать меню.
Основным минусом таких «легковесных» (lightweight) компонентов является относительно медленная работа. Положительная сторона — универсальность интерфейса созданных приложений на всех платформах.
Описание библиотеки Swing более подробно с примерами рассматривается на странице Библиотека Swing
Информация о SWT и ее использования в java-приложениях рассматривается на странице Библиотека SWT
как создать сайт на wordpress, настроить и оптимизировать wordpress
Здравствуйте, давайте рассмотрим лучшие на сегодняшний день Java фреймворки, предназначенные для веб-разработки и создания приложений.
Существуют фреймворки для всего, включая: фреймворки для разработки веб-приложений, настольных приложений, разработка сетевых приложений, разработка мобильных приложений, REST APIs, развертывания Web-сервисов, создания игр и др.
1. Grails
Grails — программный каркас для создания веб-приложений, написанный на скриптовом языке Groovy, который в свою очередь основан на Java.
Grails сделан как часть платформы Java, и это означает, что его очень легко можно использовать вместе с Java библиотеками, фреймворками и существующей базой кода.
Grails поддерживется такими популярными средами разработки как Eclipse, Netbeans, Intellij.
2. Spring
Spring Framework (или коротко Spring) — универсальный фреймворк с открытым исходным кодом для Java-платформы.
Spring, вероятно, наиболее известен как источник расширений, нужных для эффективной разработки сложных бизнес-приложений вне тяжеловесных программных моделей.
Spring может быть рассмотрен как коллекция меньших фреймворков или фреймворков во фреймворке.
Большинство этих фреймворков может работать независимо друг от друга, однако они обеспечивают большую функциональность при совместном их использовании.
Эти фреймворки делятся на структурные элементы типовых комплексных приложений:Spring имеет собственную MVC-платформу веб-приложений.
3. Vaadin
Vaadin — свободно распространяемый фреймворк для создания веб-приложений и простых сайтов, разрабатываемый одноимённой финской компанией.
Вся разработка ведется на Java, но Java-код выполняется только на сервере, на клиенте же выполняется чистый JavaScript.
Можно применять две основные модели разработки: на стороне сервера и на стороне клиента (браузера).
На официальном сайте фреймворка можно посмотреть примеры:
4. Play Framework
Фреймворк Play с открытым исходным кодом позволяет легко создавать веб-приложения при помощи языков программирования Java и Scala. Фреймворк прост в использовании.
Фреймворк Play поддерживается в среде разработки Eclipse and IntelliJ IDEA.
5. Spark
Фреймворка Spark использую в основном для созданяи REST APIs и простых веб приложений и сервисов, а также для создания сайтов.
6. Struts
Struts — фреймворк с открытым исходным кодом для создания Java веб-приложений. Struts поставляется с плагинами для поддержки REST, AJAX и JSON.
Одноко, недавно вышло удачное обновление фреймворка Struts и многие веб-разработчики снова переходят на него.
7. Netty
Фреймворк Netty с каждым годом только набирает популярность. В 2011 году проект был удостоен награды Duke’s Choice за инновации в сетевом программировании.
Сегодня его используют в своих разработках такие гиганты, как Apple, Twitter, Facebook, Google и Instagram. На базе Netty построены многие известные проекты с открытым кодом: Infinispan, HornetQ, Vert.x, Apache Cassandra и Elasticsearch.8. JavaFX (не фреймворк)
JavaFX — платформа на основе Java для создания приложений с насыщенным графическим интерфейсом. Может использоваться как для создания настольных приложений, запускаемых непосредственно из-под операционных систем, так и для интернет-приложений (RIA), работающих в браузерах, и для приложений на мобильных устройствах. JavaFX призвана заменить использовавшуюся ранее библиотеку Swing. Платформа JavaFX конкурирует с Microsoft Silverlight, Adobe Flash и аналогичными системами.
JavaFX включена в стандартные пакеты jdk и jre. Просто скачайте jdk или jre, чтобы использовать функции javafx.
9. LibGDX
libGDX – бесплатный кроссплатформенный фреймворк для разработки игр и визуализации, основанный на языке программирования Java с некоторыми компонентами, написанными на C и C++ для повышения производительности определенного кода. В настоящее время поддерживает Windows, Linux, Mac OS X, Android, iOS и HTML5 как целевые платформы.
То есть с помощью libGDX можно создавать HTML5 странички, а также Android, iOS приложения и программы для Windows, Linux, Mac OS X!
Он служит для того, чтобы облегчать разработку пользовательских интерфейсов для Java EE-приложений. В отличие от прочих MVC-фреймворков, которые управляются запросами, подход JSF основывается на использовании компонентов. Состояние компонентов пользовательского интерфейса сохраняется, когда пользователь запрашивает новую страницу и затем восстанавливается, если запрос повторяется. Для отображения данных обычно используется JSP, Facelets, но JSF можно приспособить и под другие технологии, например XUL.
11. GWT
Google Web Toolkit (GWT) — свободный Java-фреймворк, который позволяет веб-разработчикам создавать Ajax-приложения. Его особенность — это компилятор Java -> JavaScript, позволяющий почти всю разработку клиента и сервера реализовать на основе Java и лишь на последнем этапе создать соответствующие JavaScript, HTML и CSS. Выпускается под лицензией Apache версии 2.0. GWT делает акцент на повторное использование и кросс‐браузерную совместимость.
Многие люди после прочтения моих статей про создание заготовки для веб-проекта и про создание простенького веб-сервиса на сервлетах — интересовались когда я напишу и про Spring. Я не хотел, предлагал почитать книгу (и до сих пор говорю, что книга — это лучше чем 10, а то и 100 статей в интернете). Но сейчас вот решил, что объясняя одно и то же разным людям, я трачу больше времени, чем если бы один раз сел и написал статью, а потом просто кидал бы ссылочку на неё. Так что пишу ради ссылочки)). В этой статье я не буду писать как за 5 минут сделать работающий проект на спринге по моему примеру. Я напишу лишь о базовых вещах, без знания которых "запилить" проект конечно можно, но вот что там происходит, и, что важнее, почему — будет не понятно.Что такое Spring Framework?
Spring Framework, или просто Spring — один из самых популярных фреймворков для создания веб-приложений на Java. Фреймворк — это что-то похожее на библиотеку (возможно этот термин вам более знаком), но есть один момент. Грубо говоря, используя библиотеку, вы просто создаете объекты классов, которые в ней есть, вызываете нужные вам методы, и таким образом получаете нужный вам результат. То есть, тут более императивный подход: вы четко указываете в своей программе в какой конкретный момент надо создать какой объект, в какой момент вызвать конкретный метод, итд. С фреймворками дела обстоят слегка иначе. Вы просто пишете какие-то свои классы, прописываете там какую-то часть логики, а создает объекты ваших классов и вызывает методы за вас уже сам фреймворк. Чаще всего, ваши классы имплементируют какие-то интерфейсы из фреймворка или наследуют какие-то классы из него, таким образом получая часть уже написанной за вас функциональности. Но не обязательно именно так. В спринге например стараются по максимуму отойти от такой жесткой связности (когда ваши классы напрямую зависят от каких-то классов/интерфейсов из этого фреймворка), и используют для этой цели аннотации. Дальше мы еще к этому моменту вернемся. Но важно понять, что спринг — это просто набор каких-то классов и интерфейсов, которые уже написаны за вас :) Еще хочу сразу отметить, что спринг можно использовать не только для веб-приложений, но и для так знакомых всем нам самых обычных консольных программок. И сегодня мы что-то такое даже напишем.
Структура
Но спринг — это не один какой-то конкретный фреймворк. Это скорее общее названия для целого ряда небольших фреймворков, каждый из которых выполняет какую-то свою работу.
- data access;
- web;
- core;
- и других.
Почему Spring в Java?
Ну кроме того, что это модно-стильно-молодежно, могу сразу сказать, что как только вы им хоть немного овладеете — вы поймете сколько всякой разной работы вам теперь не приходится делать, и сколько всего берет на себя Spring. Можно написать пару десятков строк конфигов, написать парочку классов — и получится работающий проект. Но как только начинаешь задумываться сколько там всего находится "под капотом", сколько работы выполняется, и сколько пришлось бы писать кода, если делать такой же проект на голых сервлетах или на сокетах и чистой Java — волосы встают дыбом :) Есть даже такое выражение, как "магия" Spring. Это когда ты видишь, что все работает, но ты примерно прикидываешь сколько там всего должно происходить чтобы все работало и как оно там все работает — то кажется, что происходит это все благодаря действительно какой-то магии)) Проще назвать это все магией, чем попытаться объяснить как оно там все взаимосвязано. :) Ну и второй аргумент "за" изучение Spring — это то, что в примерно 90% вакансий на джуна (по моим личным наблюдениям) — требуется либо знание, либо хотя бы общее представление о джентельменском наборе спринга из data , web-mvc и security :) Но сегодня только об основах.
DI/IoC
Если вы пытались что-то читать по спрингу, то первое с чем вы сталкивались — это наверное вот эти вот буковки: DI/IoC. Сейчас я вам очень рекомендую отвлечься от этой статьи и почитать вот эту статью на хабре! IoC (Inversion of Control) — инверсия управления. Об этом я уже вскользь упоминал, когда писал, что при использовании библиотеки вы сами прописываете в своем коде какой метод какого объекта вызвать, а в случает с фреймворками — чаще всего уже фреймворк будет вызывать в нужный ему момент тот код, который вы написали. То есть, тут уже не вы управляете процессом выполнения кода/программы, а фреймворк это делает за вас. Вы передали ему управление (инверсия управления). Под DI понимают то Dependency Inversion (инверсию зависимостей, то есть попытки не делать жестких связей между вашими модулями/классами, где один класс напрямую завязан на другой), то Dependency Injection (внедрение зависимостей, это когда объекты котиков создаете не вы в main-е и потом передаете их в свои методы, а за вас их создает спринг, а вы ему просто говорите что-то типа "хочу сюда получить котика" и он вам его передает в ваш метод). Мы чаще будем сталкиваться в дальнейших статьях со вторым.
Бины и контекст
Одно из ключевых понятий в спринге — это бин. По сути, это просто объект какого-то класса. Допустим, для нашей программы надо использовать 3 объекта: котика, собачку и попугайчика. И у нас есть куча классов с кучей методов, где иногда нам нужен для метода котик, а для другого метода — собачка, а иногда у нас будут методы, где нужен котик и попугайчик (например метод для кормежки котика, хе-хе), а в каких-то методах — все три объекта понадобятся. Да, мы можем в main-е сначала создать эти три объекта, а потом их передавать в наши классы, а уже изнутри классов — в нужные нам методы. И так по всей программе. А если еще и представить, что периодически мы захотим менять список принимаемых параметров для наших методов (ну решили переписать что-то или добавить функциональности) — то нам придется делать довольно много правок по коду если надо будет что-то поменять. А теперь если представить, что таких объектов у нас не 3, а 300? Как вариант, это собрать все наши такие объекты в какой-то один общий список объектов (List<Object>) и во все методы передавать его, а изнутри методов уже доставать тот или иной объект, который нам нужен. Но что если представить, что по ходу программы у нас в этот список может добавиться какой-то объект, или (что хуже) удалиться? Тогда во всех методах, где мы достаем объекты из списка по их индексу — все может поломаться. Тогда мы решаем хранить не список, а мапу, где ключом будет имя нужного нам объекта, а значением — сам объект, и тогда мы сможем из него доставать нужные нам объекты просто по их имени: get("попугайчик") и в ответ получили объект попугайчика. Или например ключ — это класс объекта, а значение — сам объект, тогда мы сможем указать уже не имя объекта, а просто класс нужного нам объекта, тоже удобно. Или даже написать какую-то обертку над мапой, где сделать методы, чтобы в каких-то случаях доставать объекты по их имени, а в других случаях — по классу. Вот это и получится у нас application context из спринга. Контекст — это набор бинов (объектов). Обращаясь к контексту — мы можем получить нужный нам бин (объект) по его имени например, или по его типу, или еще как-то. Кроме того, мы можем попросить спринг самого сходить поискать в своем контексте нужный нам бин и передать его в наш метод. Например, если у нас был такой метод: нам спринг когда вызывал этот метод — передавал в него объект нашего котика из своего контекста. Теперь мы решаем, что нашему методу кроме котика нужен еще и попугайчик. Используя спринг — для нас нет ничего проще! Мы просто пишем: и спринг, когда будет вызывать этот наш метод — сам поймет, что сюда надо передать котика и попугайчика, сходит к себе в контекст, достанет эти два объекта и передаст их в наш метод. Передав спрингу бразды правления нашей программой — мы так же переложили на него ответственность за создание объектов и передачу их в наши методы, которые он будет вызывать. Возникает вопрос: а как спринг будет знать какие объекты (бины) создавать?
Читайте также: