我正在创建一个使用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>
是否有可能与两种建议模式进行春季交易?我该怎么做?
还是有另外一种解决这个问题的方法。
答案 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事务支持。