【问题标题】:JAVA EE proxy patternJAVA EE 代理模式
【发布时间】:2011-03-03 18:21:03
【问题描述】:

我一直在读到,当您要求将依赖项注入到 bean 中时,您会被注入到该资源实例的代理。我相信我知道代理是什么,它是一个知道如何将消息转发到另一个实例的实例。也有人说,正是这种模式允许容器为这个托管 bean 提供服务。

我不太明白这一点。为什么需要代理?这是如何实现的?每个bean都有一个代理对象吗?还是我有很多代理转发到一个实例?或者两者都不是?

另外,从 GoF 的书籍设计模式中,我读到您必须提供一个充当占位符的代理类。但是我在 Java EE 中从来没有这样做过,应用服务器是否在运行时创建代理类?

【问题讨论】:

    标签: dependency-injection jakarta-ee cdi proxy-pattern


    【解决方案1】:

    代理模式背后的基本假设是您不必从“用户”的角度关心它。代理伪装成声明的类型并且应该以相同的方式运行。附加值来自代理在转发或返回对目标实例的调用之前或之后所做的事情。这就是例如事务和安全性在容器中实现。

    至于添加的问题:是的,应用服务器会在必要时创建那些代理类。

    【讨论】:

    • 马丁。我在考虑您的答案以及在运行时创建代理类的可能实现。我想出了它如何工作的想法。假设我有一个测试班。应用程序服务器所做的是使用 Java 反射 api,它扩展了测试类并遍历其覆盖它们的每个操作,例如:在调用超类方法之前和之后调用 begin() 和 end() 事务,然后返回对这个子类,对吗?
    • 是的,这基本上就是正在发生的事情。当然,实现代理有不同的技术方法。如果您想自己使用这种技术,一个非常简单但功能强大的方法是使用标准库中的 DynamicProxy 类。其他方法是字节码增强和面向方面的编程(在大多数情况下依赖于字节码增强)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多