我有一个Servlet,它根据其中包含的人的地址对XML文件进行验证。验证是针对每种状态的,因此我有几种验证器的实现,但是直到每次都解析请求时,我才知道要使用哪种验证器。
我正在使用Spring,现在我正在使用以下内容获得正确的验证器:
Validator validator = applicationContext.getBean(this.state + "Validator");
这似乎破坏了一些控制反转。我考虑过将其移至本质上执行相同操作的工厂类,但将其抽象为工厂:
@Component
public class ValidatorFactory {
@Autowired
ApplicationContext applicationContext;
public Validator getValidator(String state) {
return applicationContext.getBean(state + "Validator");
}
}
似乎应该有一种更好的方法在运行时获取正确的bean,而不使用getBean()。有没有人有什么建议?
最佳答案
您可以使用地图:
@Component
public class ValidatorFactory {
@Autowired
Map<String,Validator> validators;
public Validator getValidator(String state) {
return validators.get(state + "Validator");
}
}
您可以在Spring之前用所需的bean预填充地图。