метод пружинного уничтожения + объект запроса - PullRequest
1 голос
/ 12 апреля 2011

Итак, я хотел сделать что-то вроде этого:

@Component
@Scope(value="request", proxyMode=ScopedProxyMode.INTERFACES)
public class MyBean {
    @Autowired HttpServletRequest request;

    @PreDestroy 
    public void afterRequest() {
        try {
            System.out.println("After request...");
            // use request here:
        }
        finally {
            System.out.println("Completed successfully...");
        }
    }
}

И я получаю следующее сообщение, ПОСЛЕ «Журналы сообщений успешно завершены ...»:

09: 19: 16 ПРЕДУПРЕЖДЕНИЕ. Сбой вызова метода уничтожения для bean-компонента с именем 'scopedTarget.myBean': java.lang.IllegalStateException: запрос с привязкой к потоку не найден. или обрабатываете запрос вне изначально полученного потока? Если вы действительно работаете в веб-запросе и по-прежнему получаете это сообщение, ваш код, вероятно, выполняется за пределами DispatcherServlet / DispatcherPortlet: в этом случае используйте RequestContextListener или RequestContextFilter для предоставления текущего запроса.

Я не совсем уверен, что с этим делать, так как мои записи указывают, что метод уничтожения завершен успешно. Кто-нибудь знает, что происходит?

EDIT: Вот mvc-servlet.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" xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p"
xmlns:util="http://www.springframework.org/schema/util" xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
   http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/mvc
   http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
   http://www.springframework.org/schema/context
   http://www.springframework.org/schema/context/spring-context-3.0.xsd
   http://www.springframework.org/schema/aop
   http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
   http://www.springframework.org/schema/util
   http://www.springframework.org/schema/util/spring-util-2.0.xsd">

<!-- properties file -->
<context:property-placeholder location="app.properties" />

<context:component-scan base-package="my.package.web" />
<context:component-scan base-package="my.package.services" />

<mvc:annotation-driven />

<bean class="org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:viewClass="org.springframework.web.servlet.view.JstlView" p:prefix="/WEB-INF/view" p:suffix=".jspx" />
</beans>

Ответы [ 2 ]

0 голосов
/ 20 апреля 2011

Я никогда не получал эту работу, но в итоге я изменил код для применения @After advice для методов контроллера, что дает тот же эффект.

0 голосов
/ 12 апреля 2011

Если вы используете область запроса без пружины MVC, вы должны объявить org.springframework.web.context.request.RequestContextListener в слушателе веб-приложения.

<web-app>
  ...
  <listener>
    <listener-class>
        org.springframework.web.context.request.RequestContextListener
    </listener-class>
  </listener>
  ...
</web-app>

check http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-factory-scopes-other-web-configuration

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