java - 基于注释的注入(inject);初始化一个空 map

标签 java spring

我正在使用 Spring > 基于注解的注入(inject)

@Component
public class MyClass {
    private ConcurrentHashMap<String, String> myMap;

    public MyClass() {
        myMap = new ConcurrentHashMap<String, String>();
    }

    public void foo() {
        myMap.put("a", "b");
    }
}

XML

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     
         xmlns:context="http://www.springframework.org/schema/context"
         xsi:schemaLocation="http://www.springframework.org/schema/context
             http://www.springframework.org/schema/context/spring-context-3.0.xsd
             http://www.springframework.org/schema/beans
             http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

          <context:component-scan base-package="com.basePackage" />
          <context:annotation-config/>

    </beans>

main() 类

public class MyMain() {
    public static void main(String[] args)
    // [EDITED. ADDED NOW - BEGIN]
    ApplicationContext context = new GenericXmlApplicationContext(
        "myApplicationContext.xml");
    // [EDITED. ADDED NOW - END]

        MyClass myObj = (MyClass) context.getBean(MyClass.class);
        myObj.foo();
    }
}

myObj.foo() 引发 NPE。 我期待的是:当我获取bean时,调用map的构造函数并实例化map并且代码运行顺利。

这都不起作用:
私有(private) ConcurrentHashMap myMap = new ConcurrentHashMap();

如何让这段代码正常工作。 注意:

  • 我不想在 xml 中添加部分配置,在 java 中添加部分配置。我也尝试用空 map 实例化。
  • 我想让它以注释方式工作,并在第一次使用它之前将 map 实例化为空。

最佳答案

您可能没有向我们展示所有详细信息。异常不会发生,因为您的 ConcurrentHashMapnull。发生这种情况是因为您在 put() 方法调用上传递了一个 null 对象。 ConcurrentHashMap 类不支持 null 键。 javadoc 指出

Like Hashtable but unlike HashMap, this class does not allow null to be used as a key or value.

关于java - 基于注释的注入(inject);初始化一个空 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19958260/

相关文章:

java - 使用用户输入代码的随机数生成器无法正常工作

java - 使用 Eclipse 中的 Outline View 注释掉方法

java - 使用 'webapp-runner' 运行 Spring boot 应用程序后,它停止在一行 "INFO: Starting ProtocolHandler ["http-nio-808 0"]"

java - 仅在某些记录上出现约束违规 spring JPA

java - 是什么导致基于 JTabbedPane 的 Swing 应用程序性能下降?

java - 移动视觉条码扫描器 : Why does SurfaceView not update CameraSource?

Java简单绕点旋转

hibernate - 在 Tomcat 中使用 Spring 通过 JMX 公开 Hibernate(缓存)统计信息

java - 如何捕获 Spring AOP Advice 抛出的异常

java - 由于响应内容类型无效,其余模板交换失败