是否有可能将@RequestScoped bean @注入到@无状态EJB中?



是否可以将请求作用域的CDI bean注入到无状态会话bean中?

我曾经问过一个相关的问题,我认为CDI @RequestScoped into @Stateless这个问题应该单独贴出来。

在EJB方法之间传递状态/@RequestScoped和@Stateless

我也问了一个关于JMS @MessageDriven bean的类似问题-基本上想知道关于@无状态的相同问题。

@ requestscope CDI注入到@MessageDriven bean

您完全可以在@Stateless会话bean和@MessageDriven bean中使用@RequestScoped bean。这是CDI规范和TCK的核心部分,保证可移植性。

mdb注释

请注意,有一个@Stateless bean的测试使用@RequestScoped bean,但是没有一个测试保证@MessageDriven bean可以引用@RequestScoped bean。这只是一个疏忽,并且已经在Java EE 7 TCK中修复了。所以请注意,如果它不适合MDB的情况下,这可能不是你的错:)

解决方法是简单地将您的MDB委托给任何类型的SessionBean,如@Stateless, @Stateful@Singleton都具有@RequestScoped测试。

使EJB本身具有作用域

虽然@Stateless, @Singleton@MessageDriven可以通过@Inject注入作用域引用,但它们不能 @RequestScoped或任何其他作用域。只有@Stateful模型足够灵活,可以支持作用域。换句话说,您可以将@Stateful bean类本身注释为@RequestScoped@SessionScoped等。

简单来说,@Stateless@Singleton都有固定的"作用域"。了。@Singleton本质上是@ApplicationScoped,而@Stateless可能是一些像@InvocationScoped这样的虚构范围,如果存在的话。@MessageDriven bean的生命周期完全取决于驱动它的连接器,因此也不允许具有用户定义的作用域。

最新更新