Spring @Controller и Transactionmanager - PullRequest
1 голос
/ 24 июня 2010

У меня базовый пружинный контроллер

package org.foo;

@Controller
public class HelloWorldController implements IHelloWorldController
{
   @RequestMapping(value = "/b/c/", method = RequestMethod.GET)
   public void doCriticalStuff(HttpServletRequest request, HttpServletResponse response){
      //...
   }
}

Проверено через curl -X GET http://myIP:myPort/b/c/ Который работает отлично.

Если я настраиваю Управление транзакциями через

<bean id="txManager"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource" />
</bean>

<tx:advice id="txAdvice" transaction-manager="txManager">
    <tx:attributes>
        <tx:method name="*" />
    </tx:attributes>
</tx:advice>
<aop:config>
    <aop:pointcut id="helloWorldPC"
        expression="execution(* org.foo.IHelloWorldController.*(..)) &amp;&amp; !execution(* java.lang.Object.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="helloWorldPC" />
</aop:config>

Сопоставление больше не работает. Я получаю сообщение об ошибке 404 на стороне клиента и на сервере метод не введен. При выполнении теста JUnit с точкой останова в doCriticalStuff я вижу AopUtils.invokeJoinpointUsingReflection(Object, Method, Object[]) line: ..., поэтому используется конфигурация транзакции.

Но отображение больше не работает. Есть идеи?

Я использую Spring 3.0.2.RELEASE

1 Ответ

4 голосов
/ 24 июня 2010

Транзакционный аспект применяется с использованием динамического прокси и не позволяет Spring MVC получить доступ к аннотациям @RequestMapping в целевом классе.Вы можете использовать <aop:config proxy-target-class="true"> в качестве обходного пути.

Команда Spring говорит, что не будет исправлять это поведение из соображений эффективности (см. комментарий к SPR-5084 )

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