“代理豆”是什么意思?

时间:2014-11-12 18:12:46

标签: java spring proxy

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

  

该模块执行以下操作:

     

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

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

代理bean意味着什么?

3 个答案:

答案 0 :(得分:11)

通常,你有像

这样的bean
Bean bean = new Bean(); // actually created by the context

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

例如,有时您可以跟踪方法调用所需的时间。

你可以做到

long start = .. // get start time
bean.invoke();
long end = .. // get end time
// end - start

但是为每个方法调用执行此操作很糟糕。因此,存在类似Aspect Oriented Programming的模式,体系结构和样式。

而不是上面的Bean,你有

Bean bean = new TimingBean(new Bean()); // again done by the context

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

Basic Spring使用JDK proxiesCGLIB proxies。以下是一些differences between them

它将scheduling and asynchronous invocations用于它。它将它用于transactional support with databases。它将它用于caching。它甚至将它用于Java based container configuration

答案 1 :(得分:1)

代理意味着您的客户端代码认为它正在与一个bean通信,但代理实际上正在进行侦听和响应。

自早期分布式客户端/服务器计算模型(如CORBA)以来,情况确实如此。客户端将与接口类型进行交互,就好像它存在于其内存空间中一样,但它们实际上正在与代理进行通信,该代理将处理将请求数据编组到请求中的所有混乱细节,通过网络与运行的远程对象进行通信服务器,并将响应解组回客户端。

Spring使用此模型进行远程处理。它也构成了面向方面编程模型的基础。您的代码认为它正在处理特定的接口; Spring可以在该实例之前,之后或周围编写建议,并代表您执行日志记录,事务管理等交叉操作。

答案 2 :(得分:0)

一些框架依赖于一种称为检测的机制,简而言之就是构建给定编译字节码的代理,在我们认为有用的一些地方添加一些代码。这将在它们之间实现多种任务,例如,向Spring bean添加一种分析,就像这个库所声称的那样。

Spring引擎返回它提供的每个托管bean的大量检测代理 - 这样,您可以使用Spring声明式事务处理。您可以在没有实际连接处理的情况下编写“天真”的daos,并且在没有实际事务处理的情况下使用daos的“天真”服务类 - 已检测的代理将包含带有连接实例化,提交,回滚的样板代码......

我希望这有任何帮助