Lór*_*tér 2 java dependency-injection guice
我想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());
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在transactionInterceptorGuice的帮助下获得,或者我是否需要手动创建拦截器所需的所有对象?
这在Guice FAQ中有所涉及.从该文件:
为了在AOP MethodInterceptor中注入依赖项,请在标准bindInterceptor()调用旁边使用requestInjection().
public class NotOnWeekendsModule extends AbstractModule {
protected void configure() {
MethodInterceptor interceptor = new WeekendBlocker();
requestInjection(interceptor);
bindInterceptor(any(), annotatedWith(NotOnWeekends.class), interceptor);
}
}
Run Code Online (Sandbox Code Playgroud)
另一个选择是使用Binder.getProvider并在拦截器的构造函数中传递依赖项.
public class NotOnWeekendsModule extends AbstractModule {
protected void configure() {
bindInterceptor(any(),
annotatedWith(NotOnWeekends.class),
new WeekendBlocker(getProvider(Calendar.class)));
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2922 次 |
| 最近记录: |