如果您具有同一接口的多个实现,则Spring可以将它们全部自动装配到一个集合对象中。我将使用一个使用Validator模式的示例1
Foo类别:
public class Foo {
private String name;
private String emailAddress;
private String errorMessage;
/** Getters & Setters omitted **/
}界面:
public interface FooValidator {
public Foo validate(Foo foo);
}名称验证器类:
@Component(value="FooNameValidator")
public class FooNameValidator implements FooValidator {
@Override
public Foo validate(Foo foo) {
//验证逻辑在这里。
}
}电子邮件验证程序类别:
@Component(value="FooEmailValidator")
public class FooEmailValidator implements FooValidator {
@Override
public Foo validate(Foo foo) {
//这里有不同的验证逻辑。
}
}现在,您可以将这些验证器单独或一起自动连接到一个类中。
界面:
public interface FooService {
public void handleFoo(Foo foo);
}班级:
@Service
public class FooServiceImpl implements FooService {
/** Autowire all classes implementing FooValidator interface**/
@Autowired
private List<FooValidator> allValidators;
@Override
public void handleFoo(Foo foo) {
/**You can use all instances from the list**/
for(FooValidator validator : allValidators) {
foo = validator.validate(foo);
}
}
}值得注意的是,如果您在Spring IoC容器中有一个以上接口的实现,并且未指定要与@Qualifier注释一起使用的接口,那么Spring在尝试启动时会抛出异常,因为它不知道使用哪个实例。
1:这不是进行这种简单验证的正确方法。这是有关自动装配的简单示例。如果您想要一个更简单的验证方法的想法,请查看Spring如何使用批注进行验证。