Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Spring, организация связей между компонентами 
V
    Опции темы
Astoret
Дата 9.6.2010, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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  
Код

PluginController controller = сontext.getBean("pluginController", PluginController.class);
String out = controller.getPlugin(MyCommand).requestEvent(MyMsg);

но это не выход, да и в референте по 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 файл:
Код

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <bean id="pluginController"
        class="gined.PluginController">
        <property name="plugineList">
            <map key-type="java.lang.String" value-type="gined.PlugineDefault">
                <entry value-ref="pVersion" key="version"></entry>
            </map>
        </property>
    </bean>
    <bean id="pVersion" class="gined.plugins.PVersion">
        <property name="version" value="0.0.1"></property>
        <property name="command" value="version"></property>
    </bean>
    <bean class="gined.service.httpprotocol.HttpProtocol"
        id="httpProtocol">
    </bean>
</beans>


может кто-нибудь подскажет как устранить такую зависимость или может следует это решать иначе?

Это сообщение отредактировал(а) Astoret - 9.6.2010, 10:31
PM MAIL WWW   Вверх
powerOn
Дата 9.6.2010, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



Я так понял что у тебя класс HttpProtocol использует класс PVertion, т.е. ему нужна ссылка на него. В этом случает сделай в классе HttpProtocol поле типа PVertion и с помощью спринга устанавлявай нужную реализацию.

Цитата(Astoret @  9.6.2010,  11:27 Найти цитируемый пост)
но это не выход, да и в референте по 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."


Это да, но как можно заметить такое не всегда возможно. Например, при старте приложения ты один раз вызываешь что то вроде getBean("YourApplication") и вызываешь у него метод инициализации всего остального. Получается как цепная реакция, но точка входа обязана быть. В J2EE окружении интеграция со спрингом происходит более прозрачно конечно.



--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Astoret
Дата 9.6.2010, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 16.4.2009

Репутация: нет
Всего: 1



Цитата(powerOn @  9.6.2010,  11:33 Найти цитируемый пост)
Я так понял что у тебя класс HttpProtocol использует класс PVertion, т.е. ему нужна ссылка на него. В этом случает сделай в классе HttpProtocol поле типа PVertion и с помощью спринга устанавлявай нужную реализацию.


HttpProtocol использует класс PVersion как плагин, таких плагинов может быть довольно много, с ростом проекта. Ссылка на нужный плагин должна зависеть от полученного от клиента запроса. Клиент "знает" какой ему нужен плагин и посылает сообщение ему, класс HttpProtocol  должен обработать соединение и переслать это сообщение нужному плагину или передать другому классу который "знает" какой плагин должен обрабобатывать это сообщение.
Хм, после формулировки проблемы появилась новая идея, пойду попробую, спасибо за наводку.
PM MAIL WWW   Вверх
Astoret
Дата 9.6.2010, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 16.4.2009

Репутация: нет
Всего: 1



уже сам разобрался
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0456 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.