Acesso a atributos privados com Jakarta BeanUtils

5 respostas
Rodrigo_Manhaes

Olá,

já procurei de todo jeito e não consigo encontrar referências ao uso de Jakarta BeanUtils para acesso a atributos privados. Suspeito que não haja suporte a isto. Alguém sabe com certeza?

Obrigado,
Rodrigo

5 Respostas

T

http://jakarta.apache.org/commons/beanutils/commons-beanutils-1.7.0/docs/api/org/apache/commons/beanutils/package-summary.html#standard.basic

Na documentação ele diz que é necessário haver o setter e/ou o getter. Se o atributo é privado ou não, não importa, porque ele não pega os atributos e sim chama os setters e/ou getters.

Typically, each bean property will have a public getter and setter method that are used to retrieve or define the property's value, respectively. The JavaBeans Specification defines a design pattern for these names, using get or set as the prefix for the property name with it's first character capitalized. Thus, you a JavaBean representing an employee might have (among others) properties named firstName, lastName, and hireDate, with method signatures like this:
public class Employee {
            public Employee();   // Zero-arguments constructor
            public String getFirstName();
            public void setFirstName(String firstName);
            public String getLastName();
            public void setLastName(String lastName);
            public Date getHireDate();
            public void setHireDate(Date hireDate);
            public boolean isManager();
            public void setManager(boolean manager);
            public String getFullName();
        }
_fs

O BeanUtils não usa api de Reflection, mas sim a de Introspection, o que gera esse tipo de limitação.

Se você precisa mesmo fazer isso, pode usar Reflection mesmo:

Field field = klass.getDeclaredField( "myPrivateField" );
field.setAccessible( true );

Object value = field.get( myPopulatedObject );
Rodrigo_Manhaes

Obrigado thingol e LIPE!

Quanto ao uso de setAcessible, já o utilizei em alguns pontos. O lance com BeanUtils era não reinventar a roda, mas não há jeito mesmo.

Valeu,
Rodrigo

_fs

Não precisa reinventar a roda :smiley:
http://www.koders.com/?s=ReflectionUtils&%3Abtn=Search&%3Ala=&_%3Ali=

T

De qualquer maneira, por que é que você tem de acessar um atributo privado (fora o fato de que você não está podendo mexer no código original , que é provavelmente a sua motivação? )
Se esse tipo de coisa está ocorrendo, há algo errado na arquitetura do sistema.

Criado 18 de abril de 2006
Ultima resposta 18 de abr. de 2006
Respostas 5
Participantes 3