本文介绍了您可以将 RequestScoped beans 注入 ApplicationScoped beans,并且客户端代理将在请求期间指向正确的实例:较短范围的 Bean 实例注入到 CDI 中较大范围的 Bean 实例中 - 它是如何工作的? https://stackoverflow.com/questions/6577054/bean-instance-of-a-shorter-scope-injected-in-a-bean-instance-of-a-larger-scope-i
当使用单独的生产者类进行一些额外处理并生成 RequestScoped bean 时,这是如何工作的?
部署到应用程序服务器后,由于托管 bean 和我的生产者方法都符合条件,因此由于不明确的依赖关系,我收到了 DeploymentException。
确实,它有效。在这种情况下,CDI impl 只是执行你的@Produces
需要时使用方法。
您得到了例外,因为 CDI 按类型搜索 beans 并且您有两个相同类型的定义。所以如果你已经声明了 bean@Produces
你不能让 CDI 在类路径上拥有完全相同的 bean 定义。
以下示例无效:
@ApplicationScoped
public class SomeFactory {
@Produces
public SomeBean produceSome() {
return new SomeBean();
}
}
@RequestScoped // bug, redundant definition
public class SomeBean {
}
诗。详细信息还取决于实际价值bean-discovery-mode
.
您还可以查看此示例所以答案 https://stackoverflow.com/a/10186429/1037316.
就我个人而言,我不喜欢自动发现和类路径扫描 - 但这个概念是 CDI 和 Java EE 的基础。这就是我通常不推荐人们使用 Java EE 服务器的原因之一。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)