Google Guice中Multibinder绑定的Validator执行顺序咨询
Guice Multibinder 绑定的 Validator 执行顺序
你代码里的 Multibinder 绑定的 Validator 实例,迭代执行顺序和你调用 addBinding() 的顺序完全一致——也就是先执行 FirstValidator 的 validate 方法,再执行 SecondValidator 的。
原因是 Guice 的 Multibinder 默认使用 LinkedHashSet 存储绑定实例,这个集合会严格保留元素的插入顺序,而插入顺序就是你在 configure() 方法里调用 addBinding() 的先后顺序:
- 先绑定的
FirstValidator.class会被优先加入集合 - 后绑定的
SecondValidator.class随后加入
当你注入 @Named("mainValidators") Set<Validator> 并遍历这个集合时,就会按照这个顺序依次调用每个 Validator 的方法。
补充说明:如果有多个模块都往同一个命名的 Multibinder 里添加绑定,整体顺序遵循模块安装的顺序,每个模块内部的绑定顺序依然保留该模块内 addBinding() 的调用顺序。
你的代码示例:
public class ValidationModule extends AbstractModule { @Override protected void configure() { Multibinder<Validator> validatorMultibinder = Multibinder.newSetBinder(binder(), Validator.class, Names.named("mainValidators")); validatorMultibinder.addBinding().to(FirstValidator.class); validatorMultibinder.addBinding().to(SecondValidator.class); } }
内容的提问来源于stack exchange,提问作者Amro Abdalla
相关产品推荐
相关产品推荐

