gpt4 book ai didi

java - 什么是无作用域 bean 以及何时使用它?

转载 作者:搜寻专家 更新时间:2023-10-30 19:52:51 25 4
gpt4 key购买 nike

有人可以解释什么是 none 作用域及其用途吗?

假设我有一个 bean

request scope as r1

session scope as s1

application scope a1

然后说我将 none scope bean n1 注入(inject)到上述每个范围中,然后我发现 n1 得到了当实例化其父 bean[r1/s1/a1] 时,为每个父 bean 实例化。

a1 中的无作用域 bean 在 a1 中始终可用,因为 a1 是应用作用域。s1 中的无范围 bean 仅在 s1 未被销毁和创建 s1 时可用n1 再次实例化并可供其使用。

是否正确?

使用它的目的是什么?只是为了避免我们自己创建这样的 bean?

非常感谢

最佳答案

带有 <managed-bean-scope> 的 bean的 none @NoneScoped 注释将在每个引用该 bean 的 EL 表达式上创建。它没有被 JSF 存储在任何地方。如有必要,调用者必须自己存储评估的引用。

例如 View 中的以下内容

<p>#{noneScopedBean.someProperty}</p>
<p>#{noneScopedBean.someProperty}</p>
<p>#{noneScopedBean.someProperty}</p>

在非作用域的 bean 上将在请求期间构造 bean 3(三)次。对 bean 的每次访问都会提供一个完全独立的 bean,该 bean 在属性访问后立即被丢弃。

但是,例如 session 范围的 bean 中的以下内容

@ManagedProperty("#{noneScopedBean}")
private NoneScopedBean noneScopedBean;

将使其与 session 范围的 bean 实例一样长。您应该只确保在 #{sessionScopedBean.noneScopedBean.someProperty} 的 View 中访问它相反。

因此,当您希望无作用域数据在任意 bean 中作为托管属性可用时,它可能很有用。

关于java - 什么是无作用域 bean 以及何时使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3086896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com