使用泛型型別引數自動裝配類的特定例項

如果你有一個帶有泛型型別引數的介面,那麼 Spring 可以使用它來自動實現實現你指定的型別引數的實現。

介面:

public interface GenericValidator<T> {
    public T validate(T object);
}

Foo Validator 類:

@Component
public class FooValidator implements GenericValidator<Foo> {
    @Override
    public Foo validate(Foo foo) {
        //Logic here to validate foo objects.
    }
}

Bar Validator 類:

@Component
public class BarValidator implements GenericValidator<Bar> {
    @Override
    public Bar validate(Bar bar) {
        //Bar validation logic here
    }
}

你現在可以使用型別引數自動裝配這些驗證器,以確定要自動裝配的例項。

介面:

public interface FooService {
    public void handleFoo(Foo foo);
}

類:

@Service
public class FooServiceImpl implements FooService {
    /** Autowire Foo Validator **/
    @Autowired
    private GenericValidator<Foo> fooValidator;

    @Override
    public void handleFoo(Foo foo) {
        foo = fooValidator.validate(foo);
    }   
}