我需要创建一个具有应用范围的Map。因此,如果user1使用class1的method1向该Map添加一个对象,user2将使用class2的method2找到新对象。
我知道有这样的注释:
@ApplicationScoped
但是,我不知道应该在何处声明或使用我的地图,以使其在应用程序部署时间的任何时间和任何地方具有相同的状态。
表示声明此Map的类的示例以及使用它的另一个类的方法将非常有用。
答案 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;
}
}