Java 如何将原始类注入bean

Java 如何将原始类注入bean,java,spring,Java,Spring,假设我有这样一门课: public class MyClass { ... private Map<String, Class> eventsMapping = new HashMap<String, Class>(); ... } public void setEventsMapping(Map<String, Class> mappings){ this.eventsMapping = mappings; } 公共类MyCl

假设我有这样一门课:

public class MyClass {

  ...

  private Map<String, Class> eventsMapping = new HashMap<String, Class>();

  ...

}

public void setEventsMapping(Map<String, Class> mappings){
    this.eventsMapping = mappings;
}
公共类MyClass{
...
私有映射事件映射=新建HashMap();
...
}
公共void setEventsMapping(映射映射){
this.eventsMapping=映射;
}
如何使用填充事件映射创建此类bean?我指的是bean的XML定义。问题是HashMap包含类而不是对象

我认为应该是这样的:

<bean id="myBean" class="com.my.MyClass" >
    <property name="eventsMapping">
        <map>
            <entry key="ABC">
               <bean class="java.lang.Class">
                   ???
               </bean>
            </entry>
        </map>
    </property>
</bean>

???

如何传递特定的类(不是对象)

如果您正在寻找将
java.lang.Class
实例作为值的映射,那么只需使用

<bean id="myBean" class="com.my.MyClass">
    <property name="eventsMapping">
        <map>
            <entry key="ABC" value="java.lang.Class" ></entry>
        </map>
    </property>
</bean>

您可以使用静态工厂方法创建bean:

<entry key="ABC">
     <bean class="java.lang.Class" factory-method="forName">
         <constructor-arg ref="className"/>
     </bean>
</entry>


您还可以尝试使用从完全限定字符串到类的自动转换,但在使用泛型映射的情况下,这可能不起作用

您不能创建
java.lang.Class
类型的bean,如下所示:

<bean name="aClassBean" class="java.lang.Class" />
<bean id="aClassBean" class="java.lang.Class" factory-method="forName">
      <constructor-arg value="full.package.name.of.the.class"/>
</bean>

你可以试试这样的

  <bean id="dbFieldConverters" class="java.util.HashMap">
      <constructor-arg>
         <map value-type="java.lang.Class">
             <entry key="tradeDate">
                <value>java.util.Date</value>
              </entry>
              <entry key="lastUpdate">
                  <value>java.sql.Timestamp</value>
               </entry>
          </map>
      </constructor-arg>
   </bean>

日期类型
java.sql.Timestamp

这适用于我的环境(Spring 4):


com.example.MyClassName

请注意,目标属性是
Map
type,并且
java.lang.Class
用作值类型属性。

谢谢!这是我所需要的,但我会在这方面使用Sotirios Delimanolis解决方案case@ZginPrzepadnij当前位置我相信这两个答案有点不同。您是否使用
factory method=“forName”
终止了我们?
  <bean id="dbFieldConverters" class="java.util.HashMap">
      <constructor-arg>
         <map value-type="java.lang.Class">
             <entry key="tradeDate">
                <value>java.util.Date</value>
              </entry>
              <entry key="lastUpdate">
                  <value>java.sql.Timestamp</value>
               </entry>
          </map>
      </constructor-arg>
   </bean>
<map>
    <entry key="my-key">
       <value type="java.lang.Class">com.example.MyClassName</value>
    </entry>
</map>