Продолжаем знакомство
В прошлый раз ("КВ" №29) мы с вами начали знакомиться с одним из самых серьёзных Java-фреймворков Spring, активнейшим образом применяемым большинством Java-разработчиков. В этой статье продолжим это в высшей степени полезное занятие.
Наверняка из предыдущего рассказа вы помните, что Spring Framework состоит из большого числа разных компонентов, которые обеспечивают современным бизнес-приложениям нужную функциональность, а также о том, что лежит в его основе - о шаблоне Inversion of Control, или просто IoC, и об аспектно-ориентированном программировании. Это, повторюсь, самые важные моменты в работе всего фреймворка, понимание которых является залогом дальнейшего успеха в применении Spring Framework при создании практически любого вида приложений. Тем не менее, на IoC и АОП Spring Framework не заканчивается, и сейчас мы с вами кратко обсудим возможности и особенности остальных его составляющих.
Доступ к данным (Data Access Framework)
Без доступа к данным сегодня нормально не сможет работать практически ни одно приложение - особенно если речь о web-приложениях и разных корпоративных системах. Создатели Spring Framework, конечно же, были в курсе такого положения вещей, а потому предусмотрели для программ, создаваемых на основе обсуждаемого нами фреймворка, возможность легко включать в себя доступ к данным.
Фреймворк доступа к данным, являющийся составной частью Spring, и обеспечивает приложениям возможность взаимодействия с распространёнными ORM (Object-Relational Mapping) решениями, а также, само собой, и с обычной JDBC. Поддерживаются iBatis, Hibernate, JDO, JPA, Oracle TopLink, Apache OJB и Apache Cayenne. Spring берёт на себя весь менеджмент ресурсов, связанных с базой данных, и избавляет программиста от множества рутинных вещей вроде ручной обработки связанных с доступом к данным исключений. Впрочем, многие критики говорят, что никаких преимуществ, по сравнению, скажем, с использованием Hibernate напрямую. Впрочем, здесь уже всё зависит от того, какую позицию занимает ваш руководитель проекта.
Транзакции, транзакции,
транзакции...
Ещё одной весьма важной частью Spring Framework является фреймворк управления транзакциями. Он тесно связан с фреймворком доступа к данным и обеспечивает управление локальными и глобальными транзакциями, вложенными транзакциями, причём надо отметить, что локальные транзакции не требуют сервера приложений. Есть специальные стратегии управления транзакциями для JDBC Connections, ORM, JTA TransactionManager и UserTransaction, а также объектно-ориентированных баз данных. Для чего нужен этот фреймворк? Он позволяет отказаться от использования в приложении JTA и EJB и, что не менее важно, позволяет управлять транзакциями не только путём их программирования, но и декларативно (с помощью специальных конфигурационных XML-файлов или аннотаций).
MVC-фреймворк
О шаблоне проектирования Model-View-Controller написано немало статей, и если вы являетесь постоянным читателем "Компьютерных вестей", то наверняка встречали аббревиатуру "MVC" и на страницах нашей газеты. Естественно, столь популярный шаблон проектирования не мог остаться без внимания со стороны создателей фреймворка Spring. Для его поддержки в Spring присутствует специальный компонент - MVC-фреймворк.
Первоначально в Spring'е свой MVC-фреймворк, в общем-то, не планировался, однако разработчикам показался неудачным фреймворк Struts (о котором я, кстати, тоже когда-то рассказывал в "КВ"), а потому во многом он похож на Struts, для исправления недостатков которого и задумывался. Как и Struts, Spring MVC основан на запросах. Разработчики работают со специальными "стратегическими" интерфейсами, однако у них есть доступ и к Servlet API, если вдруг они захотят спуститься на более низкий уровень абстракции. Думаю, имеет смысл перечислить наиболее важные из этих интерфейсов. HandlerMapping ответственен за выбор обработчиков внешних запросов к приложению, HandlerAdapter - за вызов и исполнение этих обработчиков, Controller - за управление запросами и перенаправление на нужные ответы, View - за отсылку нужных ответов клиенту, ViewResolver - за выбор нужного в соответствии с ситуацией View, HandlerInterceptor - за перехват и фильтрацию приходящих запросов, LocaleResolver - за определение и сохранение локали пользователя, MultipartResolver - за содействие загрузке файлов.
В качестве основного преимущества Spring MVC обычно называют сравнительную простоту тестирования написанных с его использованием приложений, кроме того, web-приложениям, построенным с использованием Spring MVC, доступны все преимущества IoC-контейнера Spring.
Remote Access Framework
Этот фреймворк базируется на RPC - удалённом вызове процедур. Многие сразу скажут: "Ну, значит, в случае Java это автоматически значит RMI", и... будут правы только наполовину. Помимо обычного RMI, поддерживаются специфичные для Spring'а RMI-механизмы, специальный бинарный протокол сериализации Hessian, RMI-IIOP/Corba, кроме того, поддерживается локальное и удалённое подключение через EJB и интеграция с Apache Axis через SOAP. Spring Remote Access Framework поддерживает автоматическое возобновление подключения в случае его разъединения, и некоторую оптимизацию на клиентской стороне для удалённых EJB-подключений.
Этот фреймворк имеет альтернативную реализацию, которая называется Cluster4Spring, так что если вам вдруг чем-то не понравится Spring Remote Access Framework, можете попробовать его альтернативу.
Spring Batch
Пакетная обработка данных - наверное, одна из самых удачных и живучих идей по поводу практического применения компьютера. Spring Batch - это составная часть Spring Framework, включающая множество полезных функций для пакетной обработки больших объёмов данных. Как написано на официальной странице этого фреймворка (static.springsource.org/spring-batch), усилия его разработчиков нацелены на обеспечение высокой производительности. При этом разработчик работает с POJO. В общем и целом, этот фреймворк бывает более чем полезен, поэтому если вы всерьёз решили изучить Spring, то переход по ссылке выше можете считать обязательным, равно как и последующее ознакомление с фреймворком, который на этом сайте располагается.
Ещё немного о других языках
В самом начале нашего разговора о Spring Framework я обратил ваше внимание на то, что хотя изначально этот фреймворк был написан на Java, есть и его порт на .NET. Java и .NET, что и говорить, популярные объектно-ориентированные платформы, однако на них всё многообразие платформ для создания приложений, которыми пользуется человечество, далеко не заканчивается. Ничего удивительного, что программисты, пишущие не на Java и не на .NET, также испытывают потребность в той функциональности, которую предоставляет Spring Framework.
"Spring Python is an offshoot of the Java-based Spring Framework and Spring Security, targeted for Python. Spring provides many useful features, and I wanted those same features available when working with Python", - написано на сайте проекта Spring Python, расположенном по адресу springpython.webfactional.com. По-русски это, в общем-то, означает всего-навсего тот факт, что Spring Python - это порт на язык Python, о котором сравнительно недавно была статья в "Компьютерных вестях", фреймворков Spring и Spring Security. Spring Security - это, кстати, фреймворк для управления авторизацией; его функциональность основана на "обычном" Spring Framework.
Аналогичный Spring Python проект расположился в Сети по адресу www.springactionscript.org. По адресу сайта понятно, для поддержи какого языка реализован этот порт Spring Framework'а. Конечно, для ActionScript'а - языка, становящегося всё более популярным по мере того, как Adobe активизирует усилия по превращению из фирмы, разрабатывающей софт для дизайнеров, в фирму, разрабатывающую софт для программистов. Что касается версии ActionScript'а, для которой написан этот порт Spring Framework, то это ActionScript 3. Фреймворк портирован на ActionScript не полностью, однако и то, что есть, способно оказать помощь Flash/Flex/AIR-программистам.
Spring IDE
Даже тем, кто пишет на Java, одного только Spring Framework'а для работы будет недостаточно - для комфортной работы нужна ещё и среда разработки, которая давала бы возможность быстро и качественно создавать приложения на основе Spring. К счастью, такая среда разработки есть - не то чтобы прямо так уж среда разработки, конечно, но плагин к Eclipse, обеспечивающий поддержку Spring Framework'а. Найти его самого и массу нужной информации можно по адресу springide.org/project. Если вы планируете изучать Spring Framework, то имеет смысл пользоваться этим плагином, потому что, весьма вероятно, именно в Eclipse и именно с этим плагином вы будете позже писать реальные приложения.
Резюме
Что ж, будем считать, что знакомство с Spring Framework состоялось. Поверхностное, конечно, знакомство - но глубокое проникновение в Spring подразумевает не чтение статей в "Компьютерных вестях", а написание приложений, пусть даже и достаточно простых, на основе Spring Framework. Документации по этому фреймворку в Сети довольно много (хотя, конечно, почти вся она на английском), примеров приложений, в общем-то, тоже, так что успехов вам в изучении Spring'а!
Вадим СТАНКЕВИЧ,
dreamdrusch@tut.by
Горячие темы