spring 自动装配特定类型的所有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) {
        //验证逻辑在这里。
    }
}

电子邮件验证程序类别:

@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如何使用批注进行验证。