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>