自動裝配特定型別的所有 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 如何使用註釋進行驗證。