ExpertiDict

Java · Avançado · Português · Técnico

proxy dinâmico

/ˈpɾɔksi dʒiˈnɐ̃miku/substantivo

Objeto gerado em execução que implementa interfaces e repassa cada chamada a um InvocationHandler. Permite interceptar métodos sem escrever a classe.

Onde usar

Está por trás de @Transactional, de repositórios Spring Data e do Mockito. Explica por que a chamada interna ignora a anotação.

Em código

Servico real = new ServicoImpl();
var proxy = (Servico) Proxy.newProxyInstance(
  Servico.class.getClassLoader(),
  new Class<?>[]{Servico.class},
  (p, m, args) -> {
    System.out.println("-> " + m.getName());
    return m.invoke(real, args);
  });

Exemplos

O Spring cria um proxy dinâmico em volta do serviço.

A chamada não passou pelo proxy dinâmico, por isso a anotação não valeu.

Cuidado

O proxy do JDK só funciona com interfaces; para classes o Spring usa CGLIB ou ByteBuddy, que geram subclasses e não conseguem sobrescrever métodos final.

Sinônimos

dynamic proxy

Veja também

Todos os termos de Java