【问题标题】:Spring @Controller and TransactionmanagerSpring @Controller 和事务管理器
【发布时间】:2010-06-24 16:02:57
【问题描述】:

我有一个基本的 Spring 控制器

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 错误,在服务器上未输入方法。在doCriticalStuff 中使用断点进行 JUnit 测试我可以看到AopUtils.invokeJoinpointUsingReflection(Object, Method, Object[]) line: ...,因此使用了事务配置。

但是映射不再起作用。有任何想法吗?

我正在使用 Spring 3.0.2.RELEASE

【问题讨论】:

    标签: java spring transactions spring-mvc


    【解决方案1】:

    事务方面使用dynamic proxy 应用,它阻止Spring MVC 访问目标类上的@RequestMapping 注释。您可以使用&lt;aop:config proxy-target-class="true"&gt; 作为解决方法。

    Spring 团队表示,出于效率原因,他们不会修复此行为(请参阅 comment on SPR-5084

    【讨论】:

    • 好的,我写了添加 而不是 并包含 cglib 版本 2.2 现在我得到“由于缺少断点而无法安装断点行号属性”试过solveme.wordpress.com/2008/08/27/… 到目前为止没有帮助。我正在使用 m2Eclipse 版本 0.10.0.20100209-0800 也许这是一个问题?
    • 除了断点消息我看到以下调用堆栈 MethodProxy.invoke(Object, Object[]) Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint() Cglib2AopProxy$CglibMethodInvocation(ReflectiveMethodInvocation).proceed() TransactionInterceptor.invoke( MethodInvocation) Cglib2AopProxy$CglibMethodInvocation(ReflectiveMethodInvocation).proceed() ExposeInvocationInterceptor.invoke(MethodInvocation) Cglib2AopProxy$CglibMethodInvocation(ReflectiveMethodInvocation).proceed() Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Object, Method, Object[], MethodProxy) 使用代理 AOP 代理
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 2017-02-20
    • 2014-02-22
    • 1970-01-01
    相关资源
    最近更新 更多