0

I have a situation where adding the @Autowired annotation gives me the following error:

Field myMap in my.package.MyClassA required a bean of type 'java.lang.String' that could not be found.

However, if I remove the annotation it works normally and the map is initialized. Here is how my code looks like:

MyClassA.java

public class MyClassA {
    private static int maxRetry;

    @Autowired
    private Map<String, String> myMap;

    /* Setters and Getters */
}

MyClassB.java

public class MyClassB {
    @Autowired
    private MyClassA myClassA;

    /* Do something with myClassA */
}

bean-config.xml

<bean id="myMapBean" class="java.util.HashMap" scope="singleton">
    <constructor-arg>
        <map>
            <entry key="R01" value="A" />
            <entry key="R02" value="B" />
        </map>
    </constructor-arg>
</bean>
<bean id="myClassA" class="my.package.MyClassA">
    <property name="maxRetry">
        <value>10</value>
    </property>
    <property name="myMap" ref="myMapBean" />
</bean>

I have tried using the util:map but I get the exact same result.

Another solution I tried was setting the map as a static field (like some other fields in the class) and take out the annotation since I have read that @Autowired doesn't work with static fields, but if I don't autowire private MyClassA myClassA the static fields don't initialize with the value set in the xml. Tried using @Component on MyClassA but that doesn't fix the issue either.

Am I doing something wrong or am I using @Autowired incorrectly and what would be the best way to fix this? I used another project I have at hand that also uses this mapping structure and the annotation works without flaws on that project.

jmhg92
  • 121
  • 2
  • 14

1 Answers1

0

If you are using annotation style

@Resource(name = "<name of map>") to inject map instead of @Autowired.

The Mighty Programmer
  • 1,242
  • 12
  • 23