Como a injeção recipiente de atributos de classe privadas anotados trabalhar em java?
-
06-07-2019 - |
Pergunta
Eu comecei a ler os Enterprise Java Beans 3,0 livro por Bill Burke e Richard Monson-Haefel e no capítulo 4 que tem este código
@PersistenceContext(unitName="titan") private EntityManager manager;
A classe, em seguida, tem métodos que acessam esse campo (que nunca é definido no construtor e não tem nenhum método setter). Então como é que o recipiente definir este campo privada com uma instância real? Estou assumindo que há um pouco de magia reflexão e / ou bytecode acontecendo - como isso é feito
Solução
getDeclaredFields () retornará uma lista dos campos declarado na classe.
Container percorre todos os campos de verificação para as anotações apropriadas. Uma vez que o campo necessário é encontrado, ele invoca setAccessible (true) nesse campo, a fim de ser capaz de manipulá-lo a partir do código onde normalmente não teria sido acessível.
Outras dicas
manager.getClass().getDeclaredFields()
Será que você obtenha acesso aos campos. Veja o javadocs aqui