在Java EE 7应用程序中,我们说我有一个会话bean类" @Stateless public class MyEJB
"。在Glassfish 4下调试时,我可以看到创建了一个名为MyEJB$Proxy$_$$_Weld$EnterpriseProxy$
的代理子类(为了向EJB提供Java EE容器服务)。
我试图找出 这些代理子类的实现方式。是否存在代理实现调用的标准Java EE SPI,例如,划分事务?或者这是通过特定于容器的内部API完成的吗?
(我对这个问题的动机是,我可以实现一个可移植的CDI扩展,以便在Java EE环境中启用真正的POJO和OO编程。)
答案 0 :(得分:1)
代理实现由ProxyFactory
类创建。您可以查看来源in the Weld Github repo。
基本上代理类看起来像这样:
public class Test_$$Proxy extends Test
{
public void doSomething(int someValue)
{
Testinstance = lookupBean();
instance.doSomething(someValue);
}
private Test lookupBean()
{
//get the correct instance from the BeanManager and return it
}
}
还有很多额外的魔力。也许您可以从the CDI spec和this article获取一些详细信息。