可从整个项目访问HashMap



我已经定义了HashMap

<bean id="userMap" class="pl.test.pojo.UserMap">
    <property name="userMap">
        <map>
        </map>
    </property>
</bean>

我希望能够从我项目中的任何类访问这些内容我给它写信的方式是:

@Autowired
UserMap userMap;
    Status s = new Status();
    User req = new User();
    s.setStatus(3);
    s.setErrorCode("0");
    s.setErrorDescription("OK");
    s.setCorrelationId(addToQuarantineRequest.getCorrelationId());
    userMap.getUserMap().put(req, s);

这是可以的,但从另一个类中,我想读取userMap的内容,首先用@autowired注释声明它,我得到了NullPointerException,我如何使Map可以从整个项目中访问?

如果您想在应用程序的所有对象之间共享一个动态设置的Map,一个简单的方法是将Map封装在一个bean中(就像您实际使用UserMap类一样),并将该bean声明为单例。每次连接包装器类时,都将获得相同的实例,从而获得相同的Map,并且能够共享值。我会做一些事情:

public interface UserMap {
   void putStatus(User u, Status s);
   Status getStatus(User u);
}
public class UserMapImpl implements UserMap {
   Map<User, Status> statuses = new HashMap<>();
   public void putStatus(User u, Status s) {
      statuses.put(u, s);
   }
   public Status getStatus(User u) {
      statuses.get(u);
   }
}

然后,如果使用XML配置,则将bean声明为singleton:

<bean id="userMap" class="pl.test.pojo.UserMapImpl" scope="singleton"/>

如果你想用键/值初始化Map,你可以在bean中完成(你需要吗?)。

无论您在哪里使用这个bean,无论是放置值还是读取值,都可以声明

public class Foo {
   @Autowired
   UserMap userMap;
   public void someMethod() {
      // put some data into userMap
   }
}
public class Bar {
   @Autowired
   UserMap userMap;
   public void someOtherMethod() {
      // read data from userMap
   }
}

最新更新