【问题标题】:<tx:annotation-driven /> leads to java.lang.ClassNotFoundException: org.aopalliance.aop.Advice<tx:annotation-driven /> 导致 java.lang.ClassNotFoundException: org.aopalliance.aop.Advice
【发布时间】:2010-09-16 00:34:03
【问题描述】:

任何人都知道为什么添加注释驱动的声明会导致找不到 aopalliance 类。我没有明确定义编织,所以使用 Spring 默认值。

感谢任何帮助

【问题讨论】:

    标签: java hibernate spring jpa transactions


    【解决方案1】:

    Spring 有两种创建代理以支持事务的模式。默认模式是创建 JDK 代理,但只有在注入接口时才有效。如果注入类,将使用 CGLib 代理,它们是使用 AspectJ 创建的(因此类路径中需要 aopalliance.jar 和 spring-aspects.jar)。

    我的建议:通过接口参考你的服务和daos:

    private MyDaoInterface dao;
    
    public void setDao(MyDaoInterface dao){
    }
    

    Spring 会自动选择基于代理的方法。

    见:

    【讨论】:

      【解决方案2】:

      我不确定真正的问题是什么(如果是关于真正的原因1,提供完整的堆栈跟踪可能会有所帮助)但事实是您目前缺少aopalliance.jar在您的类路径上(之前包含在 this threadthis blog post 中提到的 Spring jar 中)。

      1 根据所提供的详细信息级别,我的猜测是 Spring 正在加载它的 TransactionInterceptor,它是 o.a.a.Advice 的一个实现,并且正在寻找缺少的依赖项。

      【讨论】:

      • 我发现了问题。原因显然是 Hibernate 和 Spring 使用了不同版本的一些 jars。切换到两个框架的正确版本已经解决了这个问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-29
      • 2012-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多