Создание bean-компонента Spring содержит свойства ServletRequest - PullRequest
0 голосов
/ 18 августа 2010

Мне нужно создать bean-компонент Spring, чтобы он хранил свойства serverName, serverPort, contextPath объекта HttpServletRequest, чтобы я мог внедрять этот бин в другие бины по мере необходимости.

По моему мнению, эти свойства не меняются ни с одним URI, так что хорошо бы инициализировать это один раз (в любом случае, передача request экземпляра много раз совсем не так уж дорога).

Проблема в том, как я могу внедрить экземпляр HttpServletRequest в мой компонент конфигурации? Я предпочитаю инъекции на основе XML. Скорее всего, нам нужно ввести его как <property>, но я не знаю, что будет name или ref для этого ServletRequest объекта.

Цель состоит в том, чтобы хранить эти переменные в бине, чтобы они были доступны из любого бина, и мне не нужно передавать объект request многим методам в качестве аргумента, когда мне нужно получить serverName и т. Д.

Есть идеи, как создать такой боб и его конфигурацию?

1 Ответ

4 голосов
/ 18 августа 2010

Вы можете сделать это, используя bean-объект в области запросов и автоматически подключая текущий запрос к вашему bean-компоненту:

public class RequestHolder {
   private @Autowired HttpServletRequest request;

   public String getServerName() {
      return request.getServerName();
   }
}

И затем в XML:

<bean id="requestHolder" class="com.x.RequestHolder" scope="request">
  <aop:scoped-proxy/>
</bean>

Затем вы можете подключить bean-компонент requestHolder к выбранному bean-компоненту бизнес-логики.

Обратите внимание на <aop:scoped-proxy/> - это самый простой способ внедрения bean-объекта с ограниченным объемом запроса в одиночный объект - см. Spring docs о том, как это работает, и как настроить пространство имен aop.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...