gpt4 book ai didi

java - 有状态bean不保持状态

转载 作者:行者123 更新时间:2023-12-01 12:25:25 24 4
gpt4 key购买 nike

我有一个有状态 bean:

@Stateful
public class ClientContext {

private Band band;

public Band getBand() {
return band;
}

public void setBand(Band band) {
this.band = band;
}
}

我有 Arquillian 测试。

public class RequestTest extends Arquillian {

...

@Inject
private ClientContext context;

@Inject
private RequestProcessor processor;

@Test
public void test() {
context.setBand(new Band());
Assert.assertNotNull(context.getBand());

processor.doSomething();
}

}

和处理器代码:

@Stateless
@LocalBean
public class RequestProcessor {

...

@Inject
private ClientContext context;

public void doSomething() {
System.out.println(context.getBand());
}

}

我希望 RequestProcessor 打印出 Band。但实际上我每次都得到空。可能出了什么问题或者可能是我没有正确理解 Stateful beans?

最佳答案

您自己回答这个问题,有状态的主要基础是每次注入(inject)仅保留一个实例,该实例将与注入(inject) bean 一样长地存在。因此,如果您需要在 bean 之间共享状态,您可以使用 @SessionBean澄清一下,@Stateful意味着将为您注入(inject)它的每个位置创建一个实例,当您需要将某些操作及其状态绑定(bind)到一个组件时,这非常有用,因此,如果您需要创建一些信息,然后在其他类之间共享,需要选择您想要的分享方式:@Singleton:整个应用程序只有一个实例。@SessionScoped:每个客户端将有一个实例。@Stateless:如果没有其他可用,将创建一个,之后将其发布以供其他客户端使用如果您正在管理 View ,您也可以使用:@RequestScoped:将为每个请求创建一个实例,然后销毁它。@ViewScoped:只要客户端在同一 View 中不断进行更新,bean 就会保留

关于java - 有状态bean不保持状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26385937/

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