Еще один способ красивого использования @Autowired в Spring Framework

29 Дек
2011

Хочу поделиться c тобой своим опытом использования @Autowired в Spring’e.

Внимание: Пост подразумевает, что читатель знаком с Java и Spring Framework.

Итак, задача: Организовать в веб-приложении концепцию плагинов за 5 минут.

Детальное описание задачи: Допустим, мы разрабатываем веб — приложение, которое будет выполнять функции Личного Кабинета, скажем, для игрового сервера. У нас есть сам игровой сервер, неважно какой именно, и нам нужно реализовать пользовательский веб — интерфейс для конечного игрока, чтобы игрок мог выполнять какие либо действия со своим игровым аккаунтом через веб (например, оплатить премиум услуги или купить игровые блага).


Проблема: На самом деле нет никакой проблемы, если Вы решили реализовывать свой личный кабинет, заложив в него всю функциональность — статически. Но в моем случае, я решил сделать так, чтобы те, кто будет покупать эту веб мордочку для своего сервера, могли бы сами быстро просто и легко добавить нужную функциональность.


Что мы хотим получить: Веб страницу, которая будет содержать наши сервисы, реализованные в виде плагинов, каждый из этих плагинов должен реагировать на события инициируемые пользователем и возвращать какой-то результат.

Главная панель приложения с ярлыками на наши сервисы


Реализация: Самый главный поинт, как это сделать быстро, без велосипелостроения еще и используя, почти всеми любимый, стратегически важный Spring.


Поехали!



1. Заведем отдельный пакет для наших сервисов.

Структура пакетов для наших сервисов

2. Добавим сами сервисы. В моем случае это простые бизнес бины, наследники абстрактного класса MyBusinessService. На скрине, в качестве примера, приведен 1 класс для сервиса *.

Пример сервисного бина

3. Теперь скажем Spring’у, что нам было бы неплохо загрузить в наш контекст приложения все бины из нашего пакета, которые являются наследникам MyBusinessService **.

applicationContext.xml

Объявление поиска нужных нам бинов

4. После того, как мы имеем в контексте приложения все наши бины, которые кстати, загружаются при старте приложения, а не по запросу, нам остается воспользоваться магической аннотацией чтобы получить к ним доступ, скажем из какого-нить контроллера.

Autowire наших бинов в контроллер

5. Ну и можно показывать всю эту кухню пользователю.

Отображение сервисов во View



Ну вот и все. Теперь у нас есть каркас, который при необходимости мы можем расширять до бесконечности. Например, можно пробросить AJAX запросы через единый сервисный контролер до своих бинов и научить их, таким образом реагировать на разные события.

Сноски по тексту:
* — я не вдаюсь в подробности функциональности бизнес логики для бинов, так как этим примером, я хотел показать только лишь одну из возможностей @Autowired


** — при желании можно использовать собственные аннотации для маркировки бизнес бинов



Спасибо за внимание.
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх