Qual é a diferença entre o proxy dinâmico JDK e o CGLIB?

da documentação da mola:

Spring AOP Use o Proxies dinâmicas JDK ou CGLIB para criar o proxy para um determinado objeto de destino. (Dynamic JDK proxies são preferidos sempre que você tiver uma opção).

Se o objeto de destino a ser implementado pelo proxy implementa pelo menos uma interface, um proxy dinâmico JDK será usado. Todas as interfaces implementadas pelo tipo de destino serão proxy. Se o objeto de destino não implementar qualquer interface, um proxy CGLIB será criado.

Se você quiser forçar o uso do proxy CGLIB (por exemplo, para aplicar proxy a cada método definido para o objeto de destino , não apenas para aqueles implementados por suas interfaces), você pode fazê-lo. No entanto, existem alguns tópicos a considerar:

Os métodos finais não podem ser aconselhados, uma vez que não podem ser anulados.

precisará de binários CGLIB 2 em sua rota de classe, enquanto essa dinâmica Proxies estão disponíveis com JDK. A primavera irá notificá-lo automaticamente quando você precisar de CGLIB e as aulas de biblioteca do CGLIB não estão no caminho de classe.

O construtor do seu objeto proxy será chamado duas vezes. Esta é uma conseqüência natural do modelo de proxy CGLIB, pelo qual uma subclasse é gerada para cada objeto proxy. Para cada instância de proxy, dois objetos são criados: o objeto proxy real e uma instância da subclasse que implementa o Conselho. Esse comportamento não é mostrado quando os proxies JDK são usados. Normalmente, chame o fabricante do tipo proxy duas vezes, não é um problema, já que geralmente as atribuições são feitas apenas e nenhuma lógica real é implementada no construtor.

Leave a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *