在CDI中更大范围的bean实例中注入更短范围的Bean实例 – 它是如何工作的?
考虑以下请求范围的CDI bean:
@RequestScoped public class RequestScopedBean { // ... }
现在,我将它注入应用程序范围的bean:
@ApplicationScoped public class ApplicationScopedBean { @Inject private RequestScopedBean requestScopedBean; // ... }
我运行此代码并注意到请求范围的bean实例在两个请求之间是不同的,但应用程序范围的bean实例是相同的。 我怀疑的是:这是如何运作的? 请求范围的bean实例是否在每次请求时重新分配到应用程序范围的字段? 或者应用程序范围的bean的代理只是在请求之间改变?
在CDI中,每个注入的对象实际上都是代理。 因此,在这种情况下,代理可能拥有对RequestContext
的引用,并且每个方法调用都会获得正确的bean实例。
- 为什么在CDI中使用构造函数而不是setter注入?
- 可以在JSR 330中使@Inject成为可选项(如@Autowire(required = false)吗?
- 以编程方式将Bean注入CDI上下文?
- 如何改变设计,使实体不使用注射?
- @Inject字段始终为null
- JBoss Weld + java.lang.OutOfMemoryError:PermGen空间
- 何时应该使用Instance 和Provider 在CDI中注入bean?
- Java EE 6 @Inject懒惰?
- @Dependent @ javax.ejb.Singleton与@ApplicationScoped @ javax.ejb.Singleton?