zoukankan      html  css  js  c++  java
  • 调用TransactionAspectSupport.currentTransactionStatus().setRollbackOnly()时遇到的一些问题

    之前在其他地方写的,一直要求手机验证,之前能跳过,麻烦点就麻烦点了.今天编辑文章的时候直接不能改了.无奈~~~~~~~~~~~

    如果手动调用 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();会报如下错误

    org.springframework.transaction.NoTransactionException: No transaction aspect-managed TransactionStatus in scope

    debug后发现他没有进代理方法,在我这出现这种问题是因为我在dispatcher-servlet.xml里写了`<context:component-scan base-package="com.xxx" />`而在applicationContext.xml里没有注解扫描的配置.所以我怀疑就是因为没正确加载对象导致的问题.

    然后我把注解扫描分成两个部分

        <context:component-scan base-package="com.xxx"  >
            <context:exclude-filter expression=".+Controller" type="regex"/>
        </context:component-scan>
        <context:component-scan base-package="com.xxx.controller" />

    这时候报下面的错

    org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'xxx' must be of type [com.Xxx], but was actually of type [com.sun.proxy.$Proxy26]

    解决方法:  

    <aop:aspectj-autoproxy  proxy-target-class="true"/> 

    在网上找了一段相关说明,就是强制使用cglib代理时就把proxy-target-class设为true.

    通过aop命名空间的<aop:aspectj-autoproxy />声明自动为spring容器中那些配置@aspectJ切面的bean创建代理,织入切面。当然,spring在内部依旧采用AnnotationAwareAspectJAutoProxyCreator进行自动代理的创建工作,但具体实现的细节已经被<aop:aspectj-autoproxy />隐藏起来了 
    <aop:aspectj-autoproxy />有一个proxy-target-class属性,默认为false,表示使用jdk动态代理织入增强,当配为<aop:aspectj-autoproxy  poxy-target-class="true"/>时,表示使用CGLib动态代理技术织入增强。不过即使proxy-target-class设置为false,如果目标类没有声明接口,则spring将自动使用CGLib动态代理。 

    这样修改之后就能手动调用回滚了.

     参考

    http://kld208.iteye.com/blog/1632935

  • 相关阅读:
    linux会话浅析
    linux memory lock浅析
    浅谈动态库符号的私有化与全局化
    LINUX内核内存屏障
    linux内存屏障浅析
    linux内核mem_cgroup浅析
    记一个linux内核内存提权问题
    linux内核cfs浅析
    linux内核tmpfs/shmem浅析
    linux IPv4报文处理浅析
  • 原文地址:https://www.cnblogs.com/saias/p/6811941.html
Copyright © 2011-2022 走看看