bean的private String config = ...
每个实例在创建时(通常在应用程序启动期间,但也可能在应用程序服务器决定需要更多 bean 来处理不断增长的流量时)初始化一次 bean 实例。
基本上,当您执行公共 bean 的方法时,您肯定是该 bean 实例的唯一执行者。在此期间,您可以将任何内容存储在私有变量中。但是,一旦您返回调用您的 bean 的代码,您永远无法保证后续调用将被定向到同一个实例。
例子:
@Stateless
public class MyBean implements MyBeanIntf {
private Object state;
@Override
public void beanMethod() {
state = new Object();
privateMethod();
}
private void privateMethod() {
// it's safe to access 'state' here, will be the one set in
// beanMethod()
}
@Override
public void otherMethod() {
}
}
@Stateless
public void MyBeanClient {
@EJB
private MyBean myBean;
someMethod() {
myBean.beanMethod();
// Not necessarily the same instance that executed beanMethod
// will execute otherMethod
myBean.otherMethod();
}
}
那是理论。在实践中,我会避免依赖于在无状态 EJB 中保持内部临时状态的代码——只是因为这种风格向其他程序员建议,通常可以拥有 SLSB 的状态,这会导致代码混乱和潜在的错误(尤其是如果先前执行的状态被错误地选择为当前状态)。