我有一个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预填充地图。

09-30 17:44
查看更多