【发布时间】:2011-01-14 17:32:51
【问题描述】:
不知道spring使用proxy是什么意思。什么是有效的?
【问题讨论】:
-
什么是高效的?
标签: java spring dynamic-proxy
不知道spring使用proxy是什么意思。什么是有效的?
【问题讨论】:
标签: java spring dynamic-proxy
其他答案都很好,但这是我非常简单的想法。
【讨论】:
AOP 也可以使用 CGLIB 代理。这用于代理类而不是接口。
【讨论】:
final时才会发生 - 这是因为CGLIB使用子类化(继承)来创建代理。
dynamic proxy 是 JDK 的一个特性。它可以用来实现一个使用an invocation handler的接口。
一个动态代理类(简称 to 作为下面的代理类)是一个类 实现接口列表 当类在运行时指定 创建,具有描述的行为 以下。代理接口是这样的 由一个实现的接口 代理类。代理实例是 代理类的实例。每个代理 实例有一个关联的调用 处理程序对象,它实现 接口 InvocationHandler。
动态代理有一些开销。不过,对于大多数用例来说,开销不会很大。真正的问题是(过度)使用动态代理使应用程序更难理解和调试。例如,动态代理将在堆栈跟踪中显示多行。
动态代理通常用于实现decorators。 Spring 中的 AOP 就是一个例子。 (我不想深入了解AOP 的细节,也不会使用 AOP 术语来保持简单)。某些关注点在一个类中实现并在许多地方使用。动态代理(和调用处理程序)只是拦截方法调用的胶水代码(由 Spring 提供)。 (实际上,动态代理只是此功能的一个实现细节。动态生成类是实现它的另一种可能性。)
【讨论】:
我们可以通过修改源代码/字节码或使用嵌入附加功能并将调用委托给底层对象的子类或代理来向 Java 类添加功能。
【讨论】:
代理由AOP 使用。简而言之:
通常你有。
Caller --> Real object
但是,例如,当您想要自动事务管理时,spring 会放置您真实对象的代理
Caller --> Proxy --> Real object
代理开始事务的位置。
Here is nice article 解释代理的本质和它们在 spring 中的效率(性能)
【讨论】: