Galera, estou criando uma anotação e estou com alguns dúvidas. O cenário é o seguinte, quero criar uma anotação para validar meus atributos após o objeto ser construído. Até ai ta fácil, porém quero fazer essa validação sem ter que chamar o meu método validation, basicamente a ideia era se o construtor tem a anotação ele deveria chamar o método validation. Alguém poderia da uma luz?
Segue os códigos para esclarecimento.
Classe Aluno onde ficaria a anotação:
public class Aluno {
private String nome;
private String sobrenome;
private int idade;
@AtributteNotNull
public Aluno(String nome, String sobrenome, int idade) {
this.nome = nome;
this.sobrenome = sobrenome;
this.idade = idade;
} //Restante do código
Classe que validaria os valores dos fields
public class AtributteNotNullAction {
public static void validation(Object obj) {
Class<?> clazz = obj.getClass();
for (Constructor<?> construct : clazz.getConstructors()) {
Class<? extends Annotation> annotationClass = (Class<? extends Annotation>) AtributteNotNull.class;
if (construct.isAnnotationPresent(annotationClass)) {
for (Field atributo : clazz.getDeclaredFields()) {
try {
atributo.setAccessible(true);
if(atributo.get(obj) == null)
throw new InvalidAttributesException("Atributo "+atributo.getName() +" da classe "+clazz.getName()+" estar NULL");
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvalidAttributesException e) {
e.printStackTrace();
}
}
}
}
}
}
E por fim a anotação
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.CONSTRUCTOR)
@Retention(RetentionPolicy.RUNTIME)
public @interface AtributteNotNull {
}