@Component pode ser usado em classes abstratas? se eu quiser que as validaçoes sejam feitas em etapas ordenadas como seria?
@Component pode ser usado em classes abstratas? se eu quiser que as validaçoes sejam feitas em etapas ordenadas como seria?
Olá, Luccas!
Sim, você pode usar a anotação @Component
em classes abstratas no Spring. No entanto, é importante entender que uma classe abstrata anotada com @Component
não será instanciada diretamente pelo Spring, pois classes abstratas não podem ser instanciadas. O propósito de anotar uma classe abstrata com @Component
é para que suas subclasses concretas possam herdar essa anotação e serem gerenciadas pelo Spring.
Para o seu caso específico, onde você deseja que as validações sejam feitas em etapas ordenadas, você pode usar a anotação @Order
do Spring para especificar a ordem em que os componentes devem ser processados. Aqui está um exemplo prático de como você pode fazer isso:
public interface ValidadorAgendamentoDeConsulta {
void validar(DadosAgendamentoConsulta dados);
}
@Component
:@Component
public abstract class ValidadorAgendamentoDeConsultaBase implements ValidadorAgendamentoDeConsulta {
// Métodos comuns de validação podem ser definidos aqui
}
@Order
para definir a ordem:@Component
@Order(1)
public class ValidadorHorarioAntecedencia extends ValidadorAgendamentoDeConsultaBase {
@Override
public void validar(DadosAgendamentoConsulta dados) {
// Implementação da validação
}
}
@Component
@Order(2)
public class ValidadorMedicoAtivo extends ValidadorAgendamentoDeConsultaBase {
@Autowired
private MedicoRepository repository;
@Override
public void validar(DadosAgendamentoConsulta dados) {
// Implementação da validação
}
}
AgendadeConsultas
), injete a lista de validadores:@Service
public class AgendadeConsultas {
@Autowired
private List<ValidadorAgendamentoDeConsulta> validadores;
public void agendar(DadosAgendamentoConsulta dados) {
validadores.forEach(v -> v.validar(dados));
// Resto do código de agendamento
}
}
Com essa abordagem, o Spring irá garantir que os validadores sejam executados na ordem especificada pelas anotações @Order
.
Espero ter ajudado e bons estudos!