Spring - Injetar diversos beans de forma elegante?

Olá pessoal,

Gostaria de uma opinião, queria ideias sobre como melhorar este esquema de validação.
Se fosse possível remover o excesso de @Autowired da classe, já iria ser de grande ajuda.
O caso é o seguinte:

Possuo um método que recebe uma determinada entidade por parâmetro e deve fazer N validações da regra de negócio sobre ela.
Cada validador é uma implementação de uma interface “Validator”, lembrando que todas essas implementações são beans gerenciados pelo Spring.

Bem, meus validadores estão assim:

@Component
public PrimeiroValidador implements Validator {
  ...
}

@Component
public SegundoValidador implements Validator {
  ...
}

@Component
public TerceiroValidador implements Validator {
  ...
}

E para utilizá-los, faço o seguinte:

public void salvar(Entidade entidade) {
  Collection<Validator> validators = Arrays.asList(primeiroValidador, segundoValidador, terceiroValidador);
  for (Validator validator : validators) {
    validator.validate(entidade);
  }
  // se não parou em nenhum validador, salva entidade
}

Até ai parece tudo OK, minha grande dúvida é aqui:

public class EntidadeService {
  
  @Autowired
  private PrimeiroValidador primeiroValidador;

  @Autowired
  private SegundoValidador segundoValidador;

  @Autowired
  private TerceiroValidador terceiroValidador;

  // método salvar
}

Se eu tivesse 10 implementações de Validator para utilizar, teria que injetar todos os beans desta forma?
Isso está ficando muito verboso, existe alguma outra forma elegante para fazer isso? essas injeções ou até mesmo um outro esquema de validação.

Valeu
Abraços

XML!!!

configurar os beans em XML não vai abolir os validadores declarados na minha classe +_+

Engraçado, eu uso sem nenhuma anotação.

Bem, então acho que não entendi o que vc quis dizer com “XML”.

Você está falando injetar via construtor no XML e deixar apenas a Collection como atributo da classe?

class Classe {
  private Collection<Validador> validadores;

  public Classe(ValidadorUm um, ValidadorDois dois, ValidadorTres tres) {
    validadores = Arrays.asList(um, dois, tres);
  }
}
<bean class="Classe>
  <construtor-arg value="Validador1" />
  <construtor-arg value="Validador2" />
  <construtor-arg value="Validador3" />
</bean>

É isso?

Porque se eu injetar via vou continuar com os atributos declarados na classe e ai não teria diferença entre usar XML ou annotation.

Crie os beans para cada implementação de Validator no applicationContext.xm :

<bean id="validator01" class="diretorio" />
<bean id="validator02" class="diretorio" />
<bean id="validator03" class="diretorio" />

Quando você cria os beans, ao subir a aplicação todos os beans são instanciados, basta você acessa-los !

public void salvar(Entidade entidade) {  
  List<String> beans = "nome dos Beans";
  for(String nomeBean : beans) {
       ApplicationContext context = new ClassPathXmlApplicationContext("diretorio do applicationContext.xml");
       Validator validator = (Validator)context.getBean(nomeBean);
       validator.validate(entidade);  
  }  
    
}