gpt4 book ai didi

seam - 组件实例化如何根据作用域类型工作

转载 作者:行者123 更新时间:2023-12-04 06:43:46 24 4
gpt4 key购买 nike

即使我已将范围类型指定为方法,它也会在 CONVERSATION 范围内实例化。

> UserHome userHome = (UserHome) Component.getInstance(UserHome.class, ScopeType.METHOD);



这很令人困惑,有人可以解释这种行为吗?

最佳答案

你打电话时

Component.getInstance(UserHome.class, ScopeType.METHOD);

Seam 内部行为是调用
Object result = Contexts.lookupInStatefulContexts(name);

lookupInStatefulContexts API 说

Search for a named attribute in all contexts, in the following order: method, event, page, conversation, session, business process, application.



由于您的 ScopeType.METHOD 不包含您的 UserHome.class 组件,搜索将继续进行,直到获得其范围(StypeType.CONVERSATION,对吗?)

更新

I was under the impression that if you specify the ScopeType to getInstance method you will be able to create the object within that scope



如果目标组件没有关联的所需范围,getInstance 方法 不在该范围内创建组件 .相反,它使用 Contexts.lookupInStatefulContexts 执行分层搜索,直到获得一些分配的范围

如果您希望可以为一个组件分配多个作用域, 您必须使用@Role (@Roles) 注释对其进行指定
@Name("user")
@Scope(ScopeType.EVENT)
@Role(name="loggedUser", scope=ScopeType.SESSION)
public class User { ... }

所以你指定了所需的范围
Component.getInstance(User.class, ScopeType.EVENT);

或者
Component.getInstance(User.class, ScopeType.SESSION);

记得接缝 按字段/属性名称执行查找
private @In User user; // Take ScopeType.EVENT as scope

private @In User loggedUser; // Take ScopeType.SESSION as scope

关于seam - 组件实例化如何根据作用域类型工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3935424/

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