当前位置: 首页 > 面试题库 >

范围较小的Bean实例注入了CDI中范围较大的Bean实例-它是如何工作的?

关玄裳
2023-03-14
问题内容

考虑以下请求范围的CDI bean:

@RequestScoped
public class RequestScopedBean {
    // ...
}

现在,我将其注入到应用程序范围的bean中:

@ApplicationScoped
public class ApplicationScopedBean {
    @Inject private RequestScopedBean requestScopedBean;
    // ...
}

我运行了这段代码,并注意到两个请求之间的请求范围的Bean实例是不同的,但应用程序范围的Bean实例是相同的。我的疑问是:这如何运作?在每个请求时,是否将请求范围的Bean实例重新分配给应用程序范围的字段?还是应用程序范围的bean的代理只是在请求之间改变?


问题答案:

在CDI中,每个注入的对象实际上都是一个代理。因此,在那种情况下,代理可能持有对的引用,RequestContext并且在每个方法调用上都获得正确的bean实例。



 类似资料:
  • CDI新手问题。简单测试场景:JSF CDI会话范围bean。 我需要一种优雅的方式来实例化一组已知的会话范围的cdibean,而不必在页面上提及它们,也不必从其他bean调用它们的方法。作为一个测试用例——一个简单的日志bean,它只记录http会话的开始和结束时间。 当然,我可以创建一个空的JSF组件,将其放在站点范围的模板中,并使其触发所需会话bean的虚拟方法,但从我的观点来看,这有点难看

  • 我试图用jsf和CDI编写一个简单的登录表单。问题是当我注入我的SessionScoped bean时,它不像我期望的那样工作。这是我的豆子 这是我的控制器: 还有一个简单的Jsf表单,它调用login函数并显示LoginInfo类的计数器字段。 通过单击登录按钮和调试变量,我可以看到“lo”是这样的: lo={LoginInfo$Proxy$_$$_WeldClientProxy@16688}“

  • tl;dr注入servlet的CDIBean如何可能也在适当的范围内? 在oracle官方教程和一些书籍中,我们可以看到一些简单的示例,展示如何将CDIBean注入servlet。这非常简单,因为我们只需要使用@Inject注释并在bean中启用bean发现。xml。我不明白的是,注入servlet的@RequestScoped或@SessionScoped bean的作用域是否正确。servle

  • 我正在学习Spring,我学习了bean范围——它们的实际用例是什么,我无法得到任何帮助。请帮助我们在Spring中何时使用单例、原型、请求和会话范围。

  • 我正在使用不同作用域的bean开发一个Spring应用程序。许多bean是单例的,有其他请求或自定义的作用域。特别是,使用这些自定义作用域有时很难找出哪个作用域可以安全地注入到其他作用域中,或者何时需要使用。 我知道我可以为所有基本上不是单例的bean创建范围代理,但在许多情况下,这似乎是不必要的。例如,一个bean可能只应该被注入到相同范围的其他bean,但并不是每个在项目中工作的人都知道这一点

  • 我有一个@SessionScoped CDIBean,用于跟踪web应用程序中的用户会话信息。有没有办法从另一个@ApplicationScoped bean中找到这个bean的所有对象?