在Spring中动态自动装配bean而不使用ApplicationContext.getBean()

时间:2015-04-28 13:03:31

标签: java spring

我有一个servlet,它根据XML文件中包含的人的地址对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()。有没有人有任何建议?

1 个答案:

答案 0 :(得分:2)

您可以使用地图:

@Component
public class ValidatorFactory {

    @Autowired
    Map<String,Validator> validators;

    public Validator getValidator(String state) {
        return validators.get(state + "Validator");
    }
}

您可以通过Spring预先填充所需bean的地图。