自动装配特定类型的所有 bean
如果你有多个相同接口的实现,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) {
//Validation logic goes here.
}
}
电子邮件验证员类:
@Component(value="FooEmailValidator")
public class FooEmailValidator implements FooValidator {
@Override
public Foo validate(Foo foo) {
//Different validation logic goes here.
}
}
你现在可以单独或一起将这些验证器自动装配到一个类中。
接口:
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 如何使用注释进行验证。