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

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


Strange, it sounds like you have this configuration:

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

(Transaction support using AspectJ, not JDK proxies)

Since your config doesn't have a mode attribute, the default should kick in (proxy mode). But AnnotationTransactionAspect is the exact aspect used by the aspectj mode.


To get aspectj transactions working with java config.

@EnableWebMvc@Configuration@ComponentScan("com.yourdomain")@EnableTransactionManagement(mode=AdviceMode.ASPECTJ)public class ApplicationConfig extends WebMvcConfigurerAdapter {    @Bean    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {        //...    }    @Bean    public JpaTransactionManager transactionManager() {        JpaTransactionManager bean = new JpaTransactionManager(entityManagerFactory().getObject());        return bean ;    }    @Bean    public AnnotationTransactionAspect annotationTransactionAspect() {        AnnotationTransactionAspect bean = AnnotationTransactionAspect.aspectOf();        bean.setTransactionManager(transactionManager());        return bean;    }}

If you are using maven:

<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>

If you are using eclipse, this will ensure that the weaving is done when deploying inside eclipse:

http://www.eclipse.org/ajdt/