如何创建具有应用程序范围的MAP?在哪里宣布它?

时间:2014-05-29 16:22:05

标签: java cdi

我需要创建一个具有应用范围的Map。因此,如果user1使用class1的method1向该Map添加一个对象,user2将使用class2的method2找到新对象。

我知道有这样的注释:

@ApplicationScoped

但是,我不知道应该在何处声明或使用我的地图,以使其在应用程序部署时间的任何时间和任何地方具有相同的状态。

表示声明此Map的类的示例以及使用它的另一个类的方法将非常有用。

2 个答案:

答案 0 :(得分:4)

声明一个CDI bean,它将为其消耗提供Map

@Named
@ApplicationScoped
public class ApplicationScopedBean {
    private Map<KeyClass, ValueClass> map;
    @PostConstruct
    public void init() {
        //initialize the map and its data here
        map = new ConcurrentHashMap<>();
        map.put(..., ...);
        //...
    }
    //provide a getter for the map
    public Map<KeyClass, ValueClass> getMap() {
        return this.map;
    }
}

现在,bean可以注入客户端,并可以在您的视图中显示数据。

答案 1 :(得分:0)

我不确定您使用Java语言的经验。但为什么不在课堂上创建一个静态变量呢?

所以,例如:

class A {

  public static Map<String, String> globalMap;

}

从B班你可以在任何地方访问或设置它(当然你需要在顶部导入A类):

class B {

  public void doAnything(){
    Map anyMap<String, String> anyMap = new HashMap<String, String>();
    anyMap.put("anyString", "anyString");
    A.globalMap = anyMap;
  }

}