【问题标题】:How to set springframework @Transactional with AspectJ如何使用 AspectJ 设置 springframework @Transactional
【发布时间】:2011-01-12 15:21:39
【问题描述】:

我想使用spring-aspects 使我的方法具有事务性,但不使用 Spring AOP(Spring AOP 与 <tx:annotation-driven/> 配合使用很好)。 我正在使用 Maven 来管理我的项目。

有没有办法在我的项目类上进行编译时间编织,所以“它们是Transactional”。 我尝试使用Mojo's AspectJ Maven Plugin,但没有任何好的结果。

请帮忙。

【问题讨论】:

  • aspectj 插件有什么问题?你能把你的pom吗?
  • 插件没问题我的spring配置有问题。

标签: java spring maven-2 aspectj spring-aop


【解决方案1】:

我想通了。 Maven 插件工作正常,但问题出在我的 spring 配置上: 我有:

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>

我需要的是:

<bean id="transactionManager"   class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean class="org.springframework.transaction.aspectj.AnnotationTransactionAspect" factory-method="aspectOf">
    <property name="transactionManager" ref="transactionManager"/>
</bean>

现在它工作正常。我的 @Transactional 方法的性能得到了改善,这也是我所追求的。

这是我的 maven aspectj 插件配置:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>aspectj-maven-plugin</artifactId>
    <version>1.3</version>
    <configuration>
        <aspectLibraries>
            <aspectLibrary>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
            </aspectLibrary>
       </aspectLibraries>
        <source>1.5</source>
        <showWeaveInfo>true</showWeaveInfo>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>compile</goal>
            </goals>
        </execution>
    </executions>
</plugin>

希望这对某人有所帮助。

【讨论】:

  • 我有一个问题要问您:在这篇文章中,您已将 transactionManager bean 的类型从 JpaTransactionManager 替换为 HibernateTransactionManager。所以你是说org.springframework.transaction.aspectj.AnnotationTransactionAspect 没有使用 JPA?
  • 我不这么认为。很可能我弄乱了一些东西/没有正确设置它以使 JPA 工作,但不知何故它适用于 Hibernate。那是很久以前的事了,我什至不记得是什么项目了。
【解决方案2】:

也许你可以试试这个:

<tx:annotation-driven transaction-manager="transactionManager" mode="aspectj"/>

【讨论】:

    【解决方案3】:

    这是我给出的关于如何在 java config 中执行相同操作的答案的链接:

    Spring @Transactional is applied both as a dynamic Jdk proxy and an aspectj aspect

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-27
      • 2021-03-27
      • 1970-01-01
      • 2012-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多