Spring 4 Java Config Transactions代理和Aspecj

时间:2015-11-27 08:47:19

标签: proxy aspectj spring-transactions aspectj-maven-plugin

我正在创建一个使用aspectj事务的新项目。它还使用包含使用需要接口的代理方法的服务的旧版jar。

我正在使用java配置,当我设置

@EnableTransactionManagement(mode=AdviceMode.ASPECTJ)

然后,我从旧版libs访问代理样式服务时抛出以下异常:

org.hibernate.LazyInitializationException: could not initialize proxy - no Session

如果我改为:

@EnableTransactionManagement(模式= AdviceMode.PROXY)

然后我没有解决问题,但我无法在新项目中使用aspectj样式交易。

我已经尝试为每个adviceMode添加两个@EnableTransactionManagement注释,但这是不允许的。

这是带注释的类

@EnableWebMvc
@Configuration
@ComponentScan("com.mydomain")
@EnableTransactionManagement(mode=AdviceMode.ASPECTJ)
public class ApplicationConfig  extends WebMvcConfigurerAdapter {
...

我还将legacyj maven插件添加到遗留项目中,希望它能在编译时处理编织,因此aspectj事务可以正常工作。但这还没有解决问题。

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

是否有可能与两种建议模式进行春季交易?我该怎么做?

还是有另外一种解决这个问题的方法。

1 个答案:

答案 0 :(得分:0)

问题在于遗留项目的aspectj配置。

当我运行mvn编译时,它变得明显。我不得不添加依赖项:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aspects</artifactId>
    <version>${spring.version}</version>
</dependency>

使用maven编译时,它可以工作,但我仍然无法在eclipse中工作。我必须在eclipse中右键单击遗留项目:

Configure>Convert to Aspectj Project

然后我可以从eclipse部署,并在遗留罐中获得了aspectj事务支持。