【问题标题】:What is the meaning of using proxy ( dynamic proxy) in spring framework?spring框架中使用代理(动态代理)是什么意思?
【发布时间】:2011-01-14 17:32:51
【问题描述】:

不知道spring使用proxy是什么意思。什么是有效的?

【问题讨论】:

  • 什么是高效的?

标签: java spring dynamic-proxy


【解决方案1】:

其他答案都很好,但这是我非常简单的想法。

  1. 注释的意思是“为额外的行为添加隐藏代码”。
  2. 例如,框架(或任何知道注解含义的框架)添加字节码、在运行时添加 Spring、在编译时添加 AspectJ。
  3. 它添加代码作为代理和拦截器。 (包装器、装饰器、适配器是相似的,可能比“代理”更容易理解。)
  4. 当程序运行时,拦截器将执行发送到代理,代理可能会或可能不会将执行发送到您编码并“包装”的类。

【讨论】:

    【解决方案2】:

    AOP 也可以使用 CGLIB 代理。这用于代理类而不是接口。

    【讨论】:

    • 但这只有在代理类(或方法)不是final时才会发生 - 这是因为CGLIB使用子类化(继承)来创建代理。
    【解决方案3】:

    dynamic proxy 是 JDK 的一个特性。它可以用来实现一个使用an invocation handler的接口。

    一个动态代理类(简称 to 作为下面的代理类)是一个类 实现接口列表 当类在运行时指定 创建,具有描述的行为 以下。代理接口是这样的 由一个实现的接口 代理类。代理实例是 代理类的实例。每个代理 实例有一个关联的调用 处理程序对象,它实现 接口 InvocationHandler。

    动态代理有一些开销。不过,对于大多数用例来说,开销不会很大。真正的问题是(过度)使用动态代理使应用程序更难理解和调试。例如,动态代理将在堆栈跟踪中显示多行。

    动态代理通常用于实现decorators。 Spring 中的 AOP 就是一个例子。 (我不想深入了解AOP 的细节,也不会使用 AOP 术语来保持简单)。某些关注点在一个类中实现并在许多地方使用。动态代理(和调用处理程序)只是拦截方法调用的胶水代码(由 Spring 提供)。 (实际上,动态代理只是此功能的一个实现细节。动态生成类是实现它的另一种可能性。)

    【讨论】:

    • 我们为什么要实现它?我想询问有关方法或相同的事情
    【解决方案4】:

    我们可以通过修改源代码/字节码或使用嵌入附加功能并将调用委托给底层对象的子类或代理来向 Java 类添加功能。

    【讨论】:

      【解决方案5】:

      代理由AOP 使用。简而言之:

      通常你有。

      Caller --> Real object
      

      但是,例如,当您想要自动事务管理时,spring 会放置您真实对象的代理

      Caller --> Proxy --> Real object
      

      代理开始事务的位置。

      Here is nice article 解释代理的本质和它们在 spring 中的效率(性能)

      【讨论】:

      • 博卓,这个解释很好。
      • 下一个问题——为什么spring需要使用aop?我只知道@Transaction 注释
      • 许多其他的东西。例如缓存。记录。审计跟踪。或者其他你可以自己开发的东西
      猜你喜欢
      • 2011-11-03
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 2021-09-28
      • 2018-03-12
      • 1970-01-01
      • 2016-03-16
      • 1970-01-01
      相关资源
      最近更新 更多