Получите Слушатель, загруженный контекст Spring - PullRequest
0 голосов
/ 17 декабря 2010

У меня есть веб-приложение, которое загружает контекст Spring стандартным способом:

web.xml

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath*:META-INF/applicationContext.xml
        </param-value>
    </context-param>
    <listener>
        <listener-class>
             org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

К сожалению, мое приложение не является «чистым» веб-приложением, что означает, чтоУ меня нет реального внешнего интерфейса, но есть только удаленные актеры Akka, которые также инициализируются через прослушиватель web.xml.Мои актеры Akka (стандартные POJO) должны овладеть контекстом Spring, поэтому мой вопрос: как мне получить контекст Spring из класса, который не имеет ссылки на контекст сервлета?

В основном яне может использовать:

WebApplicationContextUtils.getWebApplicationContext(ctx);

... потому что актеры Akka не имеют ссылки на ServletContext.

Спасибо.

Ответы [ 3 ]

1 голос
/ 18 декабря 2010

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

1 голос
/ 17 декабря 2010
  • Если эти POJO являются пружинными бобами, вы можете заставить их реализовать ApplicationContextAware

  • Вы можете использовать @Configurable, чтобы сделать любое pojo весенним бобом

  • Если они не являются бобами весны, вы можете сохранить ServletContext в JNDI при запуске и получить к нему доступ через JNDI.

0 голосов
/ 17 декабря 2010

Интересно, какой дизайн так сильно зависит от веб-уровня?

Рекомендуемая идиома Spring - иметь слой службы интерфейса POJO, вызываемый с веб-уровня. Преимущество заключается в том, что сервисный уровень можно использовать, даже если веб-уровень полностью удален.

Если у вас нет сервисного уровня, возможно, добавив его, вы сможете использовать его без веб-уровня или сервера приложений.

...