Falar sobre talvez seja apenas uma introdução - proxy dinâmico java


Prefácio

Reflexão, é como uma espécie de mágica. A introdução de recursos de introspecção em tempo de execução dá à linguagem Java uma vitalidade inesperada. Manipulando metadados ou objetos em tempo de execução, o Java pode manipular com flexibilidade informações que só podem ser determinadas em tempo de execução. O agente dinâmico é uma tecnologia estendida amplamente utilizada no desenvolvimento de produtos. Muitas programações tediosas e repetitivas podem ser resolvidas com elegância pelo mecanismo do agente dinâmico.


Modelo de agente de pré-conhecimento

O cenário simula o usuário fazendo um pedido e ligando para o fornecedor para adicionar o log do agente

1 Demo.java 
2 ProxySubOrder.java 代理日之类 
3 RealSubOrder.java 实现类
4 SubOrder.java 接口 

Demo.java

/**
 * @ClassName Demo
 * @Author xiaojinlu
 * @Date 2020/11/5 17:03
 * @Version 1.0
 */


public class Demo {
    public static void main(String[] args) {
        SubOrder subOrder  = new ProxySubOrder();
        subOrder.getSupplier();
    }
}

ProxySubOrder.java

import org.springframework.beans.factory.annotation.Autowired;

/**
 * 主要添加供应商调用前后日志
 * 代理下单在调用供应商的时候组做些事情
 * @ClassName ProxySubOrder
 * @Author xiaojinlu
 * @Date 2020/11/5 17:07
 * @Version 1.0
 */


public class ProxySubOrder implements SubOrder{

    @Autowired
    private ProxySubOrder proxySubOrder;

    @Override
    public void getSupplier() {
        System.out.println("start invoke supplier");
        //or SubOrder subOrder = new ProxySubOrder(); local Test implement this
        proxySubOrder.getSupplier();
        System.out.println("end invoke supplier");

    }
}

RealSubOrder.java

/**
 * @ClassName RealSubOrder
 * @Author xiaojinlu
 * @Date 2020/11/5 17:06
 * @Version 1.0
 */


public class RealSubOrder implements SubOrder {
    @Override
    public void getSupplier() {
        System.out.println("do Something");
    }
}

SubOrder.java

/** 接口
 * @ClassName SubOrder
 * @Author xiaojinlu
 * @Date 2020/11/5 17:04
 * @Version 1.0
 */


public interface SubOrder {

   void getSupplier();
}

1. Definição

Aprimore a função original sem afetar o código original. Reflexão, é como uma espécie de mágica. A introdução de recursos de introspecção em tempo de execução dá à linguagem Java uma vitalidade inesperada. Manipulando metadados ou objetos em tempo de execução, o Java pode manipular com flexibilidade informações que só podem ser determinadas em tempo de execução. O agente dinâmico é uma tecnologia estendida amplamente utilizada no desenvolvimento de produtos. Muitas programações tediosas e repetitivas podem ser resolvidas com elegância pelo mecanismo do agente dinâmico.

Dois, cenários de aplicação

	1.日志
	2.用户鉴权
	3.全局性异常处理
	4.性能监控
	5.事务处理
	等

O AOP permite que os desenvolvedores escapem dessas questões tediosas por meio de um mecanismo de proxy (dinâmico), melhorando muito a abstração e a reutilização do código. Falando logicamente, nossos agentes semelhantes em design e implementação de software, como Facade, Observer e muitos outros propósitos de design, podem ser alcançados com elegância por meio de agentes dinâmicos.

Três, classificação de agente

---- Proxy estático: escreva a classe de proxy com antecedência, você pode escrevê-la manualmente ou gerá-la com ferramentas. A desvantagem é que cada classe de negócio deve corresponder a uma classe proxy, que é muito inflexível.

---- Proxy dinâmico: gere objetos proxy automaticamente em tempo de execução. A desvantagem é que leva mais tempo para gerar objetos de proxy e chamar métodos de proxy.

---- Proxy dinâmico JDK: baseado na implementação do mecanismo de reflexão Java, você deve entender o tipo de negócio da interface para gerar objetos proxy desta forma. A nova versão também começou a incorporar o mecanismo ASM.

---- proxy dinâmico cglib: Com base no mecanismo ASM, as subclasses das classes de negócios são geradas como classes proxy.

Quatro, expansão

Mecanismo de reflexão

① Apresente

O mecanismo de reflexão do Java raramente é usado no processo normal de desenvolvimento de negócios, mas é amplamente usado na construção de alguns frameworks básicos

②O que é o mecanismo de reflexão Java

O mecanismo de reflexão Java está no estado de execução, para qualquer classe, você pode conhecer todas as propriedades e métodos desta classe; para qualquer objeto, você pode chamar qualquer um de seus métodos e propriedades; esta aquisição dinâmica de informações e chamada dinâmica de métodos de objeto A função é chamada de mecanismo de reflexão da linguagem java.

③Quais as funções que o mecanismo de reflexão oferece?

---- Determine a classe à qual qualquer objeto pertence em tempo de execução

---- Construir um objeto de qualquer classe em tempo de execução

---- Determine as variáveis ​​de membro e métodos de qualquer classe em tempo de execução

---- Chame qualquer método de objeto em tempo de execução

---- Gerar proxy dinâmico

④ Cenários de aplicação do mecanismo de reflexão

---- Proxy dinâmico (AOP, RPC)

---- Fornece recursos de extensão para desenvolvedores de terceiros (contêiner Servlet, conexão JDBC)

---- Objeto de criação de componente de terceiros (OI)

---- Código reverso, como descompilação

---- Estrutura combinada com anotações, como Retrofit

---- Framework de aplicativo de mecanismo de reflexão pura, como EventBus 2.x

---- Framework de classe gerado dinamicamente, como Gson

⑤ Vantagens e desvantagens do mecanismo de reflexão:

---- Vantagens: julgamento do tipo de tempo de execução, carregamento de classe dinâmica, proxy dinâmico usando reflexão

---- Desvantagens: O desempenho é um problema, a reflexão é equivalente a uma série de operações de interpretação, dizendo ao jvm para fazer as coisas, o desempenho é muito mais lento do que o código Java direto.

Vantagens do JDK Proxy:

Minimizar dependências e reduzir dependências significa simplificar o desenvolvimento e a manutenção.O suporte do próprio JDK pode ser mais confiável do que o cglib.

Atualize suavemente a versão JDK e a biblioteca de bytecode geralmente precisa ser atualizada para garantir que possa ser usada na nova versão do Java.

O código é simples de implementar.

Com base nas vantagens da estrutura cglib semelhante:

Às vezes, pode ser inconveniente chamar o destino para implementar interfaces adicionais. De uma certa perspectiva, restringir o chamador para implementar a interface é uma prática um tanto intrusiva. Semelhante ao proxy dinâmico cglib, não há tal restrição.

Operar apenas as classes que nos interessam, sem ter que aumentar a carga de trabalho para outras classes relacionadas.

alta performance.

Resumindo

1 Reduzida redundância de código.
2 Perceba a capacidade de processamento unificado.

Acho que você gosta

Origin blog.csdn.net/aa327056812/article/details/109511621
Recomendado
Clasificación