Могу ли я использовать уже связанные экземпляры в Guice's Module.configure ()? - PullRequest
2 голосов
/ 23 марта 2011

Я бы хотел связать MethodInterceptor в методе configure() моего модуля, например:

public class DataModule implements Module {

    @Override
    public void configure(Binder binder) {
        MethodInterceptor transactionInterceptor = ...;
        binder.bindInterceptor(Matchers.any(), Matchers.annotatedWith(Transactional.class), null);
    }

    @Provides
    public DataSource dataSource() {
        JdbcDataSource dataSource = new JdbcDataSource();
        dataSource.setURL("jdbc:h2:test");
        return dataSource;
    }

    @Provides
    public PlatformTransactionManager transactionManager(DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Provides
    public TransactionInterceptor transactionInterceptor(PlatformTransactionManager transactionManager) {
        return new TransactionInterceptor(transactionManager, new AnnotationTransactionAttributeSource());
    }
}

Есть ли способ получить transactionInterceptor с помощью Guice, илимне нужно вручную создать все объекты, необходимые для моего перехватчика?

Ответы [ 2 ]

6 голосов
/ 24 марта 2011

Это описано в Guice FAQ .Из этого документа:

Чтобы добавить зависимости в метод AOP MethodInterceptor, используйте requestInjection () вместе со стандартным вызовом bindInterceptor ().

public class NotOnWeekendsModule extends AbstractModule {
  protected void configure() {
    MethodInterceptor interceptor = new WeekendBlocker();
    requestInjection(interceptor);
    bindInterceptor(any(), annotatedWith(NotOnWeekends.class), interceptor);
  }
}

Другой вариант - использовать Binder.getProvider ипередать зависимость в конструкторе перехватчика.

public class NotOnWeekendsModule extends AbstractModule {
  protected void configure() {
    bindInterceptor(any(),
                annotatedWith(NotOnWeekends.class),
                new WeekendBlocker(getProvider(Calendar.class)));
  }
}
1 голос
/ 23 марта 2011

Посмотрите, как написан Guice Persist .В частности, JpaPersistService и его модуль.

...