在DAO:
private Map<Integer,String> departments = new LinkedHashMap<Integer, String>();
@Override
public List<DepartmentEntity> getAllDepartments() {
return this.sessionFactory.getCurrentSession().createQuery("from DepartmentEntity de order by LOWER(de.departmentname)").list();
}
@Override
public Map<Integer, String> loadDepartments() {
departments.clear();
for (DepartmentEntity de : getAllDepartments())
departments.put(de.getDepartmentid(), de.getDepartmentname());
return departments;
}
它的工作正常,但是在Spring手动创建对象时它的代码不好
private Map<Integer,String> departments;
那么,在我的情况下如何从外面注入LinkedHashMap类型的地图对象?。
我试过但我得到了像空指针异常
这样的异常请任何人帮助我..
答案 0 :(得分:1)
<util:map id="myMap" map-class="java.util.LinkedHashMap" key-type="java.lang.Integer" value-type="java.lang.String"/>
<bean id="departmentDAOImpl" class="com.leadwinner.infra.assets.dao.DepartmentDAOImpl">
<property name="departments" ref="myMap"></property>
</bean>
答案 1 :(得分:0)
您可以执行以下操作: 例如
class A{
private B b;
public setB(B b){
this.b = b;
}
public Map getMapFromA(){
return b.getMap();
}
}
class B{
private Map tmp;
public void setMap(HashMap t){
tmp.putAll(t);
}
public HashMap getMap(){
return tmp;
}
}
在web.xml中
<bean id="classB" class="default.B"/>
<bean id ="classA" class="default.A"/>
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetObject"><ref local="classA"></property>
<property name="targetMethod"><value>setB</value></property>
<property name="arguments"><ref local="classB"/></property>
</bean>
现在,spring bean默认为singleton作用域。所以你可以做到以下几点。
function do(){
B b = ctx.getBean("classB");
b.setMap(someMap);
A a = ctx.getBean("classA");
a.getMapFromA();
}
我没有尝试过代码,但它会给你一个我希望如此的想法。有关MethodInvokingFactoryBean的更多详细信息:here
如果您不想在Spring之前执行此操作,并且如果您想减少工作量,请尝试使用ThreadLocal
传递参数。
答案 2 :(得分:0)
以这种方式填充地图(使用构造函数注入):
<bean name="DAO" class="path.to.yourDAOClass">
<constructor-arg index="0">
<map>
<entry key="1" value="One" />
<entry key="2" value="Two" />
</map>
</constructor-arg>
<bean>
默认情况下,<map />
的目标类是LinkedHashMap
,但您可以使用MapFactoryBean
更改目标类,以此方式通过替换<map />
来构建地图对象标记:
<bean class="org.springframework.beans.factory.config.MapFactoryBean">
<property name="targetMapClass">
<value>java.util.HashMap</value>
</property>
<property name="sourceMap">
<map>
<entry key="1" value="One" />
<entry key="2" value="Two" />
</map>
</property>
</bean>