Spring IO - платформа для построения приложений, предоставляющая набор зависимостей, при этом давая разработчикам полный контроль над деплоем только тех из них, которые им нужны. [1.1]
Spring Boot - генерация средств упрощения процесса конфигурации Spring приложений. Он не является средством автоматической генерации кода, а представляет собой плагин для системы автоматизации сборки проектов. [1.2]
Spring Framework - обеспечивает базовую поддержку управления зависимостями, управление транзакциями веб-приложений, доступ к данным, обмен сообщениями и многое другое. [1.3]
Spring Web Services - нацелен на облегчения разработки SOAP-сервиса методом contract-airst, позволяя создавать легкоизменяемые веб-сервисы путем конфигурации XML-настроек. [1.4]
Spring Data - упрощает использование таких технологий доступа к данным, как реляционные и нереляционные СУБД, map-reduce фреймворки и облачные сервисы. Spring Data состоит из подпроектов для конкретной СУБД. Эти проекты разработаны множеством компаниями и разработчиками, которые стоят за этими технологиями. [1.5]
Spring Framework — обесепечивает решения многих задач, с которыми сталкиваются java-разработчики и организации, которые хотят создать информационную систему, основанную на платформе Java. Наиболее известен как источник расширений, нужных для эффективной разработки сложных бизнес-приложений вне тяжеловесных программных моделей, которые исторически были доминирующими в промышленности.
Beans - объекты, формирующие фундамент приложения и управляемые Spring IoC контейнером.
IoC (Inversion of Control) — паттерн для передачи контроля за создание объектов контейнеру.
Dependency Injection (DI) — процесс предоставления внешней зависимости программному компоненту. Является одним из примеров IoC.
IoC Container отвечает за инстанцирование, конфигурирование и сборку объектов. IoC контейнер получает информацию из XML файла и с ним же работает. Существует два типа IoC конейнеров: BeanFactory
и ApplicationContext
.
BeanFactory Container - простейший контейнер, предоставляющий базовую поддержку для DI.
Resource resource = new ClassPathResource("applicationContext.xml");
BeanFactory factory = new XmlBeanFactory(resource);
ApplicationContext Container - этот контейнер добавляет интерпрайз функциональность поверх BeanFactory контейнера..
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
AOP (Aspect Oriented Programmin) - парадигма программирования, основанная на идее разделения функциональности для улучшения разбиения программы на модули.
SpEL (Spring Expression Language) - мощный язык для выполнения запросов и манипуляций с графом объектов во время рантайма.
Spring Framework Runtime [2.1]
Core Container [2.2]
spring-core
- модуль, предоставляющий основные части фреймворка, включая IoC и DI особенности.spring-bean
- модуль, предоставляющий BeanFactory
контейнер, который представляет собой реализацию паттерна фабрики.spring-context
- модуль, предоставляющий ApplicationContext
контейнер, построенный на основе Core и Beans модулей, который является посредником при получении доступа к любому объекту.spring-expression
- модуль, предоставляющий мощный язык Expression Language для выполнения запросов и манипуляций с графом объектов во время рантайма.AOP and Instrumentation [2.3]
spring-instrument
- обеспечивает поддержку инструментария классов и реализации classloader, которые могут использоваться в некоторых серверных приложениях.spring-aop
- предоставляет реализацию аспектно-ориентированного программирования, позволяющую вам определять, например, перехватчиков методов и pointcuts, чтобы чистенько разъединить код, который реализует различную функциональность.spring-aspects
- модуль, предоставляющий интеграцию с AspectJ, который является мощным AOP фреймворком.spring-instrument-tomcat
- модуль, содержащий спринговский инструментарий для Tomcat.Messaging [2.4]
spring-messaging
- модуль, предоставляющий абстракции из Spring Integration проекта, такие как Message
, MessageChannel
, MessageHandler
и другие. Они служат основой для messaging-based приложений. Он также включает в себя набор аннотаций для маппинга сообщений в методы.Data Access/Integration [2.5]
spring-jdbc
- модуль, предоставляющий уровень JDBC-абстракции, который освобождает от утомительного кодинга JDBC аспектов.spring-orm
- модуль, предоставляющий интеграционные уровни для популярных объекто-ориентированных mapping API, включая JPA, JDO, Hibernate, iBatis.spring-oxm
- модуль, предоставляющий уровень абстракции, который поддерживает Object/XML mapping реализации для JAXB, Castor, XMLBeans, JiBX и XStream. spring-jms
- модуль, содержащий фичи для создания и использования сообщений. Начиная с 4.1 версии фреймворка, он предоставляет интеграцию с spring-messaging
модулем.spring-tx
- модуль, поддерживающий программное и декларативное транзакционное управления для всех POJO и классов, которые реализуют специальные интерфейсы.Web [2.6]
spring-web
- модуль, предоставляющий базовые web-ориентированые интеграционные фичи, такие как multipart file-upload функциональность и инициализация IoC контейнера используя листнеры и web-ориентированные context модули приложения.spring-webmvc
- модуль (также известный, как Web-Servlet модуль), содержащий Spring MVC и REST Web Services реализацию для веб приложений.spring-websocket
- модуль , предоставляющий поддержку для WebSocket-based приложений, для двусторонних коммуникаций между клиентами и для серверов в веб приложениях.spring-webmvc-portlet
- модуль (также известный, как Web-Portlet модуль), предоставляющий функциональность Web-Servlet модуля, а также MVC реализацию для использования в Portlet среде. Отражает функциональность spring-webmvc
модуля.Test [2.7]
spring-test
- модуль, поддерживающий тестирование Spring компонентов с использованием JUnit или TestNG фреймворков.Dependency Management - процесс, включающий в себя распределение в проекте всех библиотек завимимостей в виде jar файлов, их хранение и добавление в classpaths. [2.8]
common-dbcp
, который зависит от commons-pool
).Maven "Bill Of Materials" Dependency - чтобы не произошло путанницы или ошибок с версиями спринговских jar зависимостей при использовании мавена, существует концепция - "bill of materials" (BOM) зависимость. [2.9]
spring-framework-bom
зависимость. После этого отпадает необходимость писать <version>
в зависимостях спринга.JCL (Jakarta Commons Logging) API - обязательная зависимость логгирования в спринге.
commons-logging
- модуль, зависимый от spring-core
модуля, реализует JCL Log
объекты. Он заставляет все прочие модули зависить от себя во время компиляции. [2.10]spring-core
модуля. [2.11]SLF4J (Simple Logging Facade for Java) - лучше, чем commons-logging
и эффективнее в рантайме, потому что использует время компиляции для привязок, вместо того, чтобы юзать runtime поиск. [2.12]
IoC (Inversion of Control) — паттерн для передачи контроля за создание объектов контейнеру.
DI (Dependency Injection) - процесс, в котором объекты определяют свои зависимости посредством внедрения.
org.springframework.beans
, org.springframework.context
ApplicationContext
- интерфейс, который представляет собой Spring IoC контейнер и отвечает за инстанциирование, конфигурирование и сборку бинов. Он получает инструкции о том, с какими объектами он работает, через конфигурационные метаданные, которые могут быть представлены в виде XML, Java аннотаций или Java кода.
ClassPathXmlApplicationContext
, FileSystemXmlApplicationContext
, GenericApplicationContext
, GenericGroovyApplicationContext
, GenericWebApplicationContext
, GenericXmlApplicationContext
, GroovyWebApplicationContext
, ResourceAdapterApplicationContext
, StaticApplicationContext
, StaticPortletApplicationContext
, StaticWebApplicationContext
, XmlPortletApplicationContext
, XmlWebApplicationContext
Resource
- интерфейс, предназначенный для абстракции доступа к низкоуровневым ресурсам. [4.1]
public interface InputStreamSource {
InputStream getInputStream() throws IOException;
}
public interface Resource extends InputStreamSource {
boolean exists();
boolean isOpen();
URL getURL() throws IOException;
File getFile() throws IOException;
Resource createRelative(String relativePath) throws IOException;
String getFilename();
String getDescription();
}
getInputStream()
- находит и открывает ресурс, возвращая InputStream
для чтения из ресурса.exists()
- проверяет, если ресурс существует физически или нет.isOpen()
- проверяет, если ресурс представляет хендл с открытым стримом.getDescription()
- возвращает описание для данного ресурса. Используется для вывода ошибок при работе с ресурсом.UrlResource
служит оберткой для java.net.URL
, и может быть использован для доступа к любому объекту, который доступен по URL, например файлы, HTTP ссылка, FTP ссылка и т.д. [4.2]
ClassPathResource
- реализация Resource
, которая поддерживает разрешения java.io.File
. Ресурс был создан Java кодом явно используя конструктор, но постоянно будет создаваться неявно, когда вы будете вызывать API метод, который принимает путь аргументом в виде строки. [4.3]
FileSystemResource
- реализация Resource
для java.io.File
хэндлеров. Поддерживает разрешения из File
и из URL
. [4.4]
ServletContextResource
- реализация Resource
для java.io.File
хэндлеров. Поддерживает разрешения из File
и из URL
. [4.5]
InputStreamResource
- реализация Resource
для заданного InputStream
. Она должна быть использована только в случае, если нет подходящей реализации для Resource
. [4.6]
Resource
, эта является дескрипторои для уже открытого ресурса, поэтому всегда метод isOpen()
этого класса возвращает true.ByteArrayResource
- реализация Resource
для заданного массива байт. Она создает ByteArrayInputStream
для этого массива. [4.7]
InputStreamResource
.ResourceLoader
- интерфейс, предназначенный для объектов, которые могут возвращать (т.е. загружать) Resource
инстансы. [4.8]
public interface ResourceLoader {
Resource getResource(String location);
}
Resource
инстансы.Resource template = ctx.getResource("some/resource/path/myTemplate.txt");
Resource template = ctx.getResource("classpath:some/resource/path/myTemplate.txt");
Resource template = ctx.getResource("file:///some/resource/path/myTemplate.txt");
Resource template = ctx.getResource("http://myhost.com/resource/path/myTemplate.txt");
AppliacationContext
реализации.ResourceLoaderAware
- специальный указательный интерфейс, иденцифицирующий объекты, которые ожидают реализации ResourceLoader
. [4.9]
public interface ResourceLoaderAware {
void setResourceLoader(ResourceLoader resourceLoader);
}
ResourceLoaderAware
. Этот контекст затем вызовет setResourceLoader(ResourceLoader)
, предоставляя методу себя, как аргумент.Resources as dependencies - если бин обладает свойством типа Resource
, он может быть сконфигурирован с помощью простой строки для этого ресурса. [4.10] Например:
<bean id="myBean" class="...">
<property name="template" value="some/resource/path/myTemplate.txt"/>
<property name="template" value="classpath:some/resource/path/myTemplate.txt">
<property name="template" value="file:///some/resource/path/myTemplate.txt"/>
</bean>
ClassPathResource
, FileSystemResource
или ServletContextResource
).Constructing application contexts - конструктор контекста приложения обычно принимает строку или массив строк в качестве пути к ресурсу, как например к XML файлу, который составляет определение конекста. [4.11]
ApplicationContext ctx = new ClassPathXmlApplicationContext("conf/appContext.xml");
ClassPathResource
. Но если создать FileSystemXmlApplicationContext
следующим образом:ApplicationContext ctx = new FileSystemXmlApplicationContext("conf/appContext.xml");
ApplicationContext ctx = new FileSystemXmlApplicationContext("classpath:conf/appContext.xml");
FileSystemXmlApplicationContext
, хотя и перезапишет дефолтный тип Resource
, созданного для загрузки бина.ApplicationContext ctx = new ClassPathXmlApplicationContext(
new String[] {"services.xml", "daos.xml"}, MessengerService.class);
ClassPathXmlApplicationContext
инстанс состоит из нескольких определений бинов, указанный в service.xml и daos.xml. [4.12]ApplicationContext ctx =
new ClassPathXmlApplicationContext("classpath*:conf/appContext.xml");
ApplicationContext ctx =
new FileSystemXmlApplicationContext("file:///conf/context.xml");
FileSystemApplicationContext
заставляет все привязанные к FileSystemResource
инстансы воспринимать пути как относитенльные, не важно со слешем они или без), то настоящий абсолютный путь будет записываться с помощью префикса file
. [4.14]AOP (Aspect Oriented Programming) - АОП - парадигма программирования, основанная на идее разделения функциональности для улучшения разбиения программы на модули. В то время, как в ООП главной чертой модульности является класс, в АОП - это аспект.
Aspect - Аспект - набор задач, разделенных между множеством классов. Управление транзакциями является хорошим примером разделения задачи в корпоративных Java приложениях.
Join point - Точка входа - всегда представляет собой выполнение метода.
Advice - Совет - событие, выполненное одним из аспектов в конкретной точке входа.
Introduction - Представление - объявляет дополнительные методы или поля в зависимости от типа.
Target object - Целевой объект - объект, который является советом для одного или более аспектов.
AOP proxy - АОП прокси - объект, созданный АОП фреймворком для реализации контрактов аспектов (выполнение метода совета и типо того).
Weaving - Связывание - связывание аспектов с типами или объектами приложения для создания объекта аспекта.