在Spring中修改具有单例作用域的bean的属性

时间:2017-06-14 14:51:29

标签: java spring scope singleton

我有一个单例范围的bean,如下所示:

public class MyImpl implements MyInterface {

    private HashMap<String, String> config = new HashMap<>();


    private void load(String check) {
        if ("abc".equalsIgnoreCase(check)) {
            config.put("key", "val");
        }
        else {
            config.put("key", "val_else");
        }
    }

    @Override
    public HashMap<String, String> getConfig(String check) {
        load(check);
        return config;
    }
}

然后在其他类中,我注入MyImpl并尝试使用如下配置:

  @Service
  public class Service {
    @Inject
    MyInterface impl;
    public doJob(String check){
      HashMap<String, String> config = impl.getConfig(check);
      String myValue= config.get("key");
      //some other code
    }
   }

如果我有100秒的请求/秒,并且检查的值对于某些请求是 abc 而对于其他请求是其他 ,我还会在 myValue 中有不同的价值吗?我试图概括代码,因为我无法在这里分享确切的代码。我的问题是我们可以根据请求修改singleton bean的属性吗?

1 个答案:

答案 0 :(得分:0)

创建ThreadLocal存储(请参阅the example)以避免此问题。

或者,您可以将bean范围更改为REQUEST