7. Transaction-management support
Prev |  | Next

## 7. Transaction-management support

## 7.1. @AnnotationDrivenTx

JavaConfig provides full support for the annotation-driven declarative transaction management features provided by the core Spring Framework with the `@AnnotationDrivenTx` annotation:

    public class FooServiceImpl implements FooService {
        @Transactional
        public void doStuff() {
            // invoke multiple calls to data access layer
        }
    }

    @Configuration
    @AnnotationDrivenTx
    public class Config {
        @Bean
        public FooService fooService() {
            return new FooServiceImpl(fooRepository());
        }

        @Bean
        public FooRepository fooRepository() {
            return new JdbcFooRepository(dataSource());
        }

        @Bean
        public PlatformTransactionManager transactionManager() {
            return new DataSourceTransactionManeger(dataSource());
        }

        @Bean
        public DataSource dataSource() {
            // create and return a new JDBC DataSource ...
        }
    }

    public class Main {
        public static void main(String[] args) {
            JavaConfigApplicationContext ctx = new JavaConfigApplicationContext(Config.class);

            // The FooService retrieved from the container will be proxied for tx management
            FooService fooService = ctx.getBean(FooService.class);

            // call the @Transactional method on the proxy - transactional behavior is guaranteed
            fooService.doStuff();
        }
    }

Like Spring XML's `<tx:annotation-driven>` element, `@AnnotationDrivenTx` expects the presence of a bean named `transactionManager` of type `PlatformTransactionManager` as in the example above. Should you wish to forego this convention and name a transaction manager bean another name, you may do as follows:

    @Configuration
    @AnnotationDrivenTx(transactionManager="txManager") // specify explicitly the bean to use
    public class Config {
        @Bean
        public PlatformTransactionManager txManager() {
            return new DataSourceTransactionManeger(dataSource());
        }

        // other beans...
    }

The other attributes available to the `@AnnotationDrivenTx` are similar to the attributes to the `<tx:annotation-driven>` element. See the related documentation and the JavaDoc for `@AnnotationDrivenTx` for details.

Prev |  | Next
6.2. JavaConfig and Annotation-Driven Configuration | Home | 8. AOP support