Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在spring框架中使用代理(动态代理)的意义是什么?_Java_Spring_Dynamic Proxy - Fatal编程技术网

Java 在spring框架中使用代理(动态代理)的意义是什么?

Java 在spring框架中使用代理(动态代理)的意义是什么?,java,spring,dynamic-proxy,Java,Spring,Dynamic Proxy,我不知道在春天使用代理的意义。什么是高效的?是JDK的一个特性。它可用于使用实现接口 动态代理类(简称 to(作为下面的代理类)是一个类 它实现了一个接口列表 在运行时指定的类 已创建,行为如所述 在下面代理接口就是这样一个例子 接口,该接口由 代理类。代理实例是一个 代理类的实例。每个代理 实例具有关联的调用 处理程序对象,它实现 接口调用处理程序 动态代理有一些开销。不过,对于大多数用例,开销不会很大。真正的问题是(过度)使用动态代理使应用程序更难理解和调试。例如,动态代理将在stacktr

我不知道在春天使用代理的意义。什么是高效的?

是JDK的一个特性。它可用于使用实现接口

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

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

动态代理通常用于实现。这方面的一个例子是春季的AOP。(我不想深入讨论AOP的细节,也不会使用AOP术语来使事情变得简单)。某些关注点在一个类中实现,并在许多地方使用。动态代理(和调用处理程序)只是用于拦截方法调用的粘合代码(由Spring提供)。(实际上,动态代理只是此功能的一个实现细节。动态生成类是实现它的另一种可能性。)

代理由使用。简言之:

通常你有

Caller --> Real object
但是,例如,当您需要自动事务管理时,spring会为您的真实对象设置一个代理

Caller --> Proxy --> Real object
代理在其中启动事务


在spring中解释代理的本质及其效率(性能),我们可以通过修改源代码/字节代码或使用嵌入附加功能并将调用委托给底层对象的子类或代理向Java类添加功能。

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

其他答案很好,但下面是我用非常简单的术语对它的看法

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

  • 我们为什么要实施这一点?我想问一下方法学或类似的问题,你说的“什么是有效的?”是什么意思?Bozho,这是一个很好的解释。下一个问题-为什么spring需要使用aop?我只知道@Transaction注释还有很多其他的东西。例如,缓存。登录中。审计跟踪。或者您可以自行开发的任何其他功能,但只有在代理类(或方法)不是
    final
    时才会发生这种情况-这是因为CGLIB使用子类化(继承)来创建代理。