Spring 3 для профессионалов

Spring 3 для профессионалов
Автор: Кларенс Хо, Роб Харроп
Год: 2012
ISBN: 978-5-8459-1803-1
Страниц: 877
Язык: Русский
Формат: PDF/DJVU +code
Размер: 77 Мб

Download

Гибкая, облегченная, с открытым кодом платформа Spring Framework продолжает занимать место лидирующей инфраструктуры для разработки приложений на Java для современных программистов и разработчиков. Она работает в тесной интеграции с другими гибкими и облегченными Java-технологиями с открытым кодом, такими как Hibernate, Groovy, MyBatis и т.д. В настоящее время Spring также может взаимодействовать с Java EE и JPA 2. Эта книга посвящена новейшей версии платформы Spring Framework — версии 3.1. Широкий спектр рассматриваемых вопросов делает данную книгу наиболее полным руководством по Spring из числа доступных на рынке. Благодаря настоящей книге, вы изучите основы Spring, освоите ключевые темы, а также ознакомитесь с реальным опытом реализации в приложениях удаленной обработки, Hibernate и EJB. Помимо основ, вы узнаете, как использовать Spring Framework для построения различных уровней или частей корпоративного Java-приложения, в том числе транзакций, веб-уровня и уровня презентаций, развертывания и многого другого. Полнофункциональный пример приложения позволит применить на практике многие технологии и подходы, описанные в книге, и посмотреть, как они работают вместе. После чтения этой книги вы сможете оснастить арсенал своих знаний мощью Spring и задействовать его для построения сложных приложений Spring.

+

Что такое Spring?

Возможно, самой трудной частью объяснения Spring как технологии является точная классификация того, что Spring собой представляет. Обычно Spring описывают как облегченную платформу для построения Java-приложений, но с этим утверждением
связаны два интересных момента. Во-первых, Spring можно использовать для построения любого приложения на языке Java (т.е. автономных, веб-приложений, приложений JEE и т.д.), что отличает Spring от многих других платформ, таких как Apache Struts,
которая ограничена только веб-приложениями. Во-вторых, характеристика “облегченная” в действительности не имеет никакого отношения к количеству классов или размеру дистрибутива; напротив, она определяет принцип всей философии Spring — минимальное воздействие. Платформа Spring является облегченной в том смысле, что для использования ядра Spring вы должны вносить минимальные (если вообще какие-либо) изменения в код своего приложения, а если в какой-то момент вы решите больше не пользоваться Spring, то и это сделать очень просто. Обратите внимание, что речь идет только о ядре Spring — многие дополнительные компоненты Spring, такие как доступ к данным, требуют более тесной привязки к Spring Framework. Однако польза от такой привязки вполне очевидна, и практически повсеместно в книге мы будет представлять приемы минимизации влияния этой привязки на разрабатываемые приложения.

Инверсия управления или внедрение зависимостей?

Ядро Spring Framework основано на принципе инверсии управления (Inversion of Control — IoC), при котором создание и управление зависимостями между компонентами становятся внешними. Рассмотрим пример, в котором класс Foo при выполнении
обработки определенного вида зависит от экземпляра класса Ваг. Традиционно Foo создает экземпляр Ваг, используя операцию new или получая нужный экземпляр от некоторого фабричного класса. Согласно подходу IoC, экземпляр класса Ваг (или его подкласса) предоставляется классу Foo во время выполнения некоторым внешним процессом. Такое поведение, т.е. внедрение зависимостей во время выполнения, было переименовано Мартином Фаулером на более описательное — внедрение зависимостей (Dependency Injection — DI). Точная природа зависимостей, управляемых DI, обсуждается в главе 4.

 

Реализация DI в Spring основана на двух ключевых концепциях Java — компонентах JavaBean и интерфейсах. При использовании Spring в качестве поставщика DI вы получаете гибкость определения конфигурации зависимостей внутри своих приложений разнообразными путями (т.е. внешне в XML-файлах, с помощью конфигурационных Java-классов Spring или посредством аннотаций Java в коде). Компоненты JavaBean (также называемые POJO (Plain Old Java Object — простой старый объект Java)) предоставляют стандартный механизм для создания ресурсов Java, которые являются конфигурируемыми множеством способов. В главе 4 вы увидите, как Spring использует спецификацию JavaBean для формирования ядра своей модели конфигурации DI; фактически на любой ресурс, управляемый Spring, ссылаются как на бин (bean). На тот случай, если вы еще не знакомы с технологией JavaBean, в начале главы 4 будет приведен краткий пример.

Интерфейсы и DI — это взаимовыгодные технологии. Мы уверены, что любой читатель этой книги согласится с утверждением о том, что проектирование и написание кода интерфейсов предназначено для гибких приложений, но сложность сборки вместе
приложения, использующего интерфейсы, довольно высока и требует от разработчиков дополнительных усилий по кодированию. За счет применения DI объем кода, который необходим при проектировании приложения на основе интерфейсов, снижается почти
до нуля. Кроме того, с помощью интерфейсов можно получить максимальную отдачу от DI, потому что бины могут использовать любую реализацию интерфейса для удовлетворения их зависимости.

В контексте внедрения зависимостей Spring действует больше подобно контейнеру, чем платформе, предоставляя экземпляры классов вашего приложения со всеми необходимыми зависимостями, но делает это гораздо менее навязчивым способом. Использование Spring для DI основано всего лишь на следовании внутри своих классов соглашениям об именовании, принятым для компонентов JavaBean (требование, которое, как будет показано в главе 5, можно обойти, воспользовавшись поддержкой внедрения через метод в Spring); ни специальных классов, предназначенных для наследования, ни собственных схем именования, которые должны соблюдаться, не предусмотрено. Во всяком случае, единственным изменением, которое делается в приложении, использующем DI, является открытие доступа к дополнительным свойствам ваших компонентов JavaBean. что позволяет внедрять больше зависимостей во время выполнения.

Аспектно-ориентированное программирование с использованием Spring

Аспектно-ориентированное программирование (АОП) — это одна из “моделей программирования текущего момента” в мире Java. АОП предоставляет возможность реализации сквозной логики — т.е. логики, которая применяется к множеству частей приложения — в одном месте и обеспечения автоматического применения этой логики по всему приложению. В настоящее время АОП находится в центре повышенного внимания, однако, несмотря на поднятую шумиху, АОП является очень полезной технологией,
которая должна поддерживаться любым инструментальным набором для разработчиков на Java.

Подход Spring к АОП заключается в создании “динамических прокси” для целевых объектов и “привязывании” объектов к сконфигурированному совету для выполнения сквозной логики.

Еще одной популярной библиотекой АОП является проект Eclipse AspectJ (www.eclipse.org/aspectj), который предоставляет более мощные средства, включая конструирование объектов, загрузку классов и большую возможность выделения сквозной
функциональности.

Хорошей новостью для разработчиков, использующих Spring и АОП. станет тот факт, что, начиная с версии 2.0, в Spring   поддерживается более тесная интеграция с AspectJ.

Ниже перечислено несколько особенностей.

  • Поддержка выражений со срезами в стиле AspectJ.
  • Поддержка стиля аннотаций @AspectJ при использовании для привязывания АОП из Spring.
  • Поддержка аспектов, реализованных в AspectJ для DI.
  • Поддержка привязывания во время загрузки внутри объекта ApplicationContext в Spring.

Оба вида АОП имеют свои области применения, и в большинстве случаев АОП из Spring достаточно для удовлетворения требований сквозной функциональности в приложении. Однако для более сложных требований может использоваться AspectJ, и в одном и том же приложении Spring можно смешивать оба вида АОП.

АОП имеет много применений. Типичное применение, демонстрируемое во множестве традиционных примеров АОП, связано с выполнением некоторого вида регистрации, но возможности АОП выходят далеко за рамки тривиальных приложений регистрации. На самом деле внутри самой платформы Spring Framework АОП используется для многих целей, в частности, при управлении транзакциями. АОП в Spring подробно рассматривается в главах 6 и 7, где демонстрируются типичные применения АОП в рамках Spring Framework и примерах приложений, обсуждаются вопросы производительности АОП и области, в которых традиционные технологии подходят лучше, чем АОП.

Проект Spring

Одной из самых подкупающих особенностей проекта Spring является уровень активности, наблюдаемой в настоящее время в сообществе, и степень взаимодействия между другими проектами, такими как CGLIB, Apache Geronimo и AspecU. Наиболее
расхваливаемое преимущество открытого кода связано с тем, что если даже проект будет неожиданно свернут, у вас останется исходный код; но давайте посмотрим правде в глаза — вряд ли вы захотите остаться с кодовой базой размера Spring и впоследствии
поддерживать и улучшать ее. По этой причине отрадно знать, что дела идут хорошо, а сообщество Spring сохраняет высокую активность.

Происхождение Spring

Истоки Spring можно проследить вплоть до книги Expert One-to-One J2EE Design and Development написанной Родом Джонсоном (Wrox, 2002 г.). В этой книге Род представляет собственную платформу под названием Interface 21 Framework, которую он разработал для использования в своих приложениях. После выпуска в мир открытого кода эта платформа сформировала основу Spring Framework, которую мы знаем сейчас.

Платформа Spring быстро прошла через стадии бета-тестирования и предвыпускной версии, и ее первый официальный выпуск 1.0 был сделан доступным 24 марта 2004 г. С тех пор платформа Spring значительно разрослась и на время написания этой книги она доступна в виде версии Spring Framework 3.1.

Сообщество Spring

Сообщество Spring — одно из лучших сообществ из всех проектов с открытым кодом, с которыми мы встречались. Списки рассылки и форумы всегда активны, а скорость добавления новых средств, как правило, высока. Команда разработчиков действительно сосредоточена на том, чтобы сделать Spring самой успешной платформой для построения Java-приложений, и об этом можно судить по качеству производимого кода. Большая часть непрерывно продолжающейся разработки Spring связана с переделкой существующего кода, чтобы сделать его быстрее, короче и аккуратнее.

Как упоминалось ранее. Spring также получает преимущества от тесных взаимоотношений с другими проектами с открытым кодом, и этот факт чрезвычайно важен, если вы полагаетесь на значительную зависимость от полного дистрибутива Spring.

С точки зрения пользователя, возможно, наилучшими средствами Spring являются великолепная документация и тестовый комплект, входящие в состав дистрибутива. В документации описаны практически все возможности Spring, и это упрощает освоение платформы новыми пользователями. Тестовый комплект Spring является всеобъемлющим — команда разработчиков пишет тесты для любого аспекта. Когда они обнаруживают ошибку, то фиксируют ее, сначала написав тест, который выявляет ошибку, и затем прогнав его.

Что все это означает для вас? Выражаясь просто, это значит, что вы можете быть уверены в высоком качестве Spring Framework, а также в том, что в обозримом будущем команда разработчиков Spring продолжит совершенствовать и без того замечательную
платформу.

Spring для Microsoft .NET

Главный проект Spring Framework на 100% основан на Java. Однако из-за успеха Java-версии разработчики из мира .NET почувствовали себя несколько обделенными: по этой причине Марк Поллак и Род Джонсон запустили проект Spring .NET. За исключением Рода, этими двумя проектами занимаются совершенно разные команды разработчиков, так что проект для .NET должен оказывать лишь минимальное влияние на проект Spring на Java. На самом деле мы считаем это очень хорошей новостью.
Вопреки распространенному мнению в мире Java, .NET вовсе не является нагромождением ненужного хлама, и мы сами можем подтвердить это, имея за плечами множество успешно поставленных нашим клиентам приложений .NET Этот проект открывает
совершенно новые возможности для взаимодействия, особенно с тех пор, как платформа .NET заняла лидирующие позиции в некоторых областях, таких как метаданные на уровне исходного кода, и должен привести к получению наилучшего продукта на обоих фронтах. Еще один побочный эффект от этого проекта связан с тем. что он делает переход между платформами более простым для разработчиков, поскольку и там, и там можно использовать Spring. Это приобретает даже еще больший вес с учетом того, что другие проекты, вроде Hibernate и MyBATIS, уже имеют свои эквиваленты для .NET Дополнительные сведения по платформе Spring .NET можно получить на веб-сайте www.springframework.net.