Java 使用Guice';将同一参数绑定到多个实现;s多粘合剂和辅助注射
我有一组验证程序类,它们都扩展了一个公共抽象类,都使用相同的构造函数Java 使用Guice';将同一参数绑定到多个实现;s多粘合剂和辅助注射,java,guice,Java,Guice,我有一组验证程序类,它们都扩展了一个公共抽象类,都使用相同的构造函数 公共抽象类抽象验证器{ 公共抽象验证器(数据源数据源){ // ... } } 公共类验证器1扩展了AbstractValidator{ 公共验证器1(数据源数据源){ 超级(数据源); } } 公共类验证器2扩展了AbstractValidator{ 公共验证器2(数据源数据源){ 超级(数据源); } } 我想让Guice有能力 知道如何构造所有这些验证器,将相同的数据源注入所有验证器 使用 通过谷歌搜索,看起来我可以使
公共抽象类抽象验证器{
公共抽象验证器(数据源数据源){
// ...
}
}
公共类验证器1扩展了AbstractValidator{
公共验证器1(数据源数据源){
超级(数据源);
}
}
公共类验证器2扩展了AbstractValidator{
公共验证器2(数据源数据源){
超级(数据源);
}
}
我想让Guice有能力
AssistedInject
,但问题是如果我想这样做,我必须为每个验证器建立一个工厂,这是一个庞大的样板文件。因为它们都有相同的构造函数,我觉得一定有更好的方法。我的DataSource
对象是在Guice之外创建的,我只想将它绑定到我的configure
中DataSource.class
的所有实例
我愿意改变的一件事是使用某种工厂方法,它允许我仅从数据源
创建验证器。。。我认识到我希望使用构造函数可能不是类型安全的
看起来很像我想要的,但它是在Scala中,我对Scala不够熟悉,无法完全理解。没有必要使用AssistedInject 您可以像这样绑定
数据源的实例:
DataSource dataSource = ...;
Injector injector = Guice.createInjector(new AbstractModule() {
@Provides @Singleton DataSource provideDataSource() { return dataSource; }
@ProvidesIntoSet Validator provideValidator1(DataSource dataSource) { return new Validator1(dataSource); }
@ProvidesIntoSet Validator provideValidator2(DataSource dataSource) { return new Validator2(dataSource); }
});
Set<Validator> validators = injector.get(new Key<Set<Validator>>(){});
数据源数据源=。。。;
Injector=Guice.createInjector(新抽象模块(){
@提供@Singleton DataSource provideDataSource(){return DataSource;}
@ProvidesIntoSet验证程序provideValidator1(数据源数据源){返回新的验证程序1(数据源);}
@ProvidesIntoSet验证程序provideValidator2(数据源数据源){返回新的验证程序2(数据源);}
});
Set validators=injector.get(new Key(){});