在 EJB 3.1 中,容器在技术上如何代理并有效地欺骗我的无接口对象



在 EJB 3.1 中,我可以创建一个无接口会话 bean。当它被注入到其他类中时,它们会收到一个与我的 pojo 类型相同的对象,但他们实际上得到的是一个存根,通过一系列类与我的 pojo 交互。这招是怎么搞定的?我可以理解存根是否与我的 pojo 具有相同的接口类型,但是容器如何创建相同类型的对象?反射?位编织?非常感谢!

容器生成一个代理类,该代理类是无接口 EJB 类的子类,然后它覆盖所有方法来执行其正常代理(设置、拆卸和调用实际的 Bean 实例),而不是调用实例中的方法。 由于java.lang.reflect.Prooxy不支持扩展类,容器必须使用另一种方法来生成类,可能使用ASM,BCEL,Javassist等字节码库。

最新更新