![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Astoret |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 16.4.2009 Репутация: нет Всего: 1 |
Добрый день! Уже два дня пытаюсь разобраться но выходит очень плохо.
Есть набор(пока что только один) bean на которые будет "навешан" некий функционал, к примеру выдать номер версии. Есть другой набор который этот функционал может затребовать. В моем примере есть компонент HttpProtocol который прослушивает порт и после получения команды getVer должен обратится к методу requestEvent класса PVersion который вернет строку с номером версии, HttpProtocol отправит ее обратно клиенту. В дальнейшем таких классов как PVersion будет довольно много, таких как HttpProtocol тоже может быть несколько. По началу я организовал это довольно просто - создал класс PluginController, в нем в мапе хранил мои плагины, такие как PVersion, HttpProtocol получал ссылку на PluginController и выполнив команду pluginController.getPlugin(MyCommand).requestEvent(MyMsg) получал ответ. Потом я понял что мои объекты слишком связанны и начал читать про DI и IoC контейнеры, Spring. Только теперь стал вопрос - как организовать связь между моими HttpProtocol и PVersion? Можно конечно добавить в класс HttpProtocol
но это не выход, да и в референте по Spring написано "The ApplicationContext interface has a few other methods for retrieving beans, but ideally your application code should never use them. Indeed, your application code should have no calls to the getBean method at all, and thus no dependency on Spring APIs at all." вот на всякий случай мой XML файл:
может кто-нибудь подскажет как устранить такую зависимость или может следует это решать иначе? Это сообщение отредактировал(а) Astoret - 9.6.2010, 10:31 |
||||
|
|||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
Я так понял что у тебя класс HttpProtocol использует класс PVertion, т.е. ему нужна ссылка на него. В этом случает сделай в классе HttpProtocol поле типа PVertion и с помощью спринга устанавлявай нужную реализацию.
Это да, но как можно заметить такое не всегда возможно. Например, при старте приложения ты один раз вызываешь что то вроде getBean("YourApplication") и вызываешь у него метод инициализации всего остального. Получается как цепная реакция, но точка входа обязана быть. В J2EE окружении интеграция со спрингом происходит более прозрачно конечно. |
|||
|
||||
| Astoret |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 16.4.2009 Репутация: нет Всего: 1 |
HttpProtocol использует класс PVersion как плагин, таких плагинов может быть довольно много, с ростом проекта. Ссылка на нужный плагин должна зависеть от полученного от клиента запроса. Клиент "знает" какой ему нужен плагин и посылает сообщение ему, класс HttpProtocol должен обработать соединение и переслать это сообщение нужному плагину или передать другому классу который "знает" какой плагин должен обрабобатывать это сообщение. Хм, после формулировки проблемы появилась новая идея, пойду попробую, спасибо за наводку. |
|||
|
||||
| Astoret |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 16.4.2009 Репутация: нет Всего: 1 |
уже сам разобрался
|
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |