Annotation + Apache Bean Utils

6 respostas
javaBeats

Hail!

Galera, preciso de uma ajuda no seguinte… Considerem o seguinte código:

// Uma classe base
public abstract class Base {
 
  @MyOwnAnnotation  
  private int atributo;

}

// Uma classe especializada
public class Especializada extends Base {
  
  @MyOwnAnnotation
  private int atributo2;

  @YetAnotherAnnotationOfMine
  private int atributo3;


}

Como faço para, a partir de uma instância da classe ESPECIALIZADA, descobrir se existem Annotations no atributo herdado da classe Base?

Eu tentei usar a API padrão de reflect, mas o método getDeclaredFields() não retorna os campos que forem herdados de outra classe =/

O Commons BeanUtils da Apache traz o atributo herdado para mim, mas não há na API - ou ao menos eu não encontrei - um meio de acessar as Annotations de uma propriedade (espero sinceramente estar enganado, e que alguém me indique o caminho =)

Por fim, o bendito java.beans.Introspector, que também foi capaz de identificar todas as propriedades (claro, o Commons BeanUtils é escrito sobre ele =), mas não soube como recuperar Annotations sobre as mesmas.

Alguma idéia, pessoal?

Desde já, eu agradeço!

Rodrigo

6 Respostas

javaBeats

Ninguém…?

Ou o que eu estou pedindo é tão ridículo e óbvio, só eu que não vi? =D

Valeu!

Mauricio_Linhares

Se você tem os objetos Field, basta chamar Field.getDeclaredAnnotations(), não são as anotações do Campo que você quer?

javaBeats

Sim companheiro, mas se você olhar a documentação desse método, vai ver que ele não retorna os campos herdados de super classes, que é o que eu preciso, nesse caso.

Rodrigo

Mauricio_Linhares

Campo herdado? Esse é o objeto Field, que representa um atributo em um objeto. Você não disse lá em cima que já tinha todos os campos (os objetos Field) que precisava?

javaBeats

Sim, usando o Commons BeanUtils ou o Introspector, mas estes não trazem annotations destes campos… Eu teria que recuperar o campo, e depois chamar getField(name) para ter uma instância de Field e pegar as annotations dele. Acontece que eu gostaria de saber se já posso recuperar essas annotations durante a introspecção, com o BeanUtils, Introspector, ou qualquer outro recurso que vocês possam me sugerir =D

Mas se não for possível, tudo bem, basta fazer a introspecção e depois recuperar a instância de Field, que tem as Annotations.

Rodrigo

Mauricio_Linhares

Não, não é possível fazer isso via BeanUtils não, você tem que pegar o Field e chamar o método getAnnotatios() nele.

Criado 12 de abril de 2006
Ultima resposta 15 de abr. de 2006
Respostas 6
Participantes 2