@Override protected void configure() { bind(EntityManagerFactory.class).toInstance(emf); TransactionInterceptor txInterceptor = new TransactionInterceptorImpl(); requestInjection(txInterceptor); bind(TransactionInterceptor.class).toInstance(txInterceptor); bindInterceptor(Matchers.any(), Matchers.annotatedWith(Transactional.class), txInterceptor); bind(OuterTransactedClass.class); if (causeException) { bind(NestedTransactedClass.class) .to(NestedTransactedClassWhichThrowsRuntimeExceptionImpl.class); } else { bind(NestedTransactedClass.class).to(NestedTransactedClassImpl.class); } }