"代理豆"是什么意思?

Cor*_*ein 10 java proxy spring

在工作和在线,我一直听到关于企业Java开发的术语"代理".例如,metrics-spring使用以下短语:

该模块执行以下操作:

创建指标和代理bean,其中包含使用@Timed,@ Metered,@ ExceptionMetered和@Counted注释的方法[强调我的]

我不熟悉Java生态系统框架和库中的许多语言.我觉得我对bean内容有很好的理解,但我还不清楚如何代理bean.

代理bean意味着什么?

Sot*_*lis 11

通常,你有一个类似的bean

Bean bean = new Bean(); // actually created by the context
Run Code Online (Sandbox Code Playgroud)

有了这个,你可以做任何Bean类声明为行为的事情(调用它的方法).

例如,有时您可以跟踪方法调用需要多长时间.

你可以做到

long start = .. // get start time
bean.invoke();
long end = .. // get end time
// end - start
Run Code Online (Sandbox Code Playgroud)

但是为每个方法调用执行此操作很糟糕.因此,存在类似面向方面编程的模式,体系结构和样式.

而不是Bean上述,你有

Bean bean = new TimingBean(new Bean()); // again done by the context
Run Code Online (Sandbox Code Playgroud)

其中TimingBean是一个代理类型,它扩展并实现了扩展和实现的所有类型Bean.对于所有意图和目的,它一个Bean,但它在将每个调用委托给Bean对象之前添加了一堆额外的行为.在这种情况下,它将跟踪每个Bean方法执行的时间.

Basic Spring使用JDK代理CGLIB代理.以下是它们之间的一些差异.

它使用它来进行调度和异步调用.它将它用于数据库的事务支持.它用它来缓存.它甚至将它用于基于Java的容器配置.