Java · Avançado · Português · Técnico
proxy dinâmico
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