3

现在,我有一个名为 A 的类,其中包含如下属性:

private Map<Class<?>, List<EntityIndexConfig>> relatedEntitiesMap;

我最初的想法是从 XML 中注入一些带有它们各自列表的键,但无法使其工作。相反,我使用@PostConstruct 创建了一个方法:

@PostConstruct @SuppressWarnings("serial")
public void loadRelatedEntities() {
   /* And here I load it */
   relatedEntitiesMap = new HashMap<Class<?>, List<EntityIndexConfig>>(){{
       put(Agency.class, new ArrayList<EntityIndexConfig>() {{
           add(new EntityIndexConfig("Package.listByAgency", applicationContext.getBean(PackageRepository.class), "agencyId"));
       }});
       /* More entries here... */
   }
}

尽管它有效,但如果可能的话,我希望能够在 Spring XML 文件中进行此配置。任何想法如何创建地图并将类作为键和 EntityIndexConfig?s 列表?

如果你们中的任何人知道,我将不胜感激。谢谢。

4

3 回答 3

2

文档中所述:

<util:map key-type="java.lang.Class">  
        <entry key="com.MyClass">  
            <util:list>  
              <ref bean="EntityIndexConfig1"/>  
              <bean class="com.mypackage.SomeEntityIndexConfig/>  
            </util:list>  
        </entry> 
</util:map> 

这假设您已经声明了util命名空间前缀:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">

请记住我是徒手写的,很可能我在某处犯了错字或语法错误。但这至少应该让你非常接近。

于 2013-10-19T01:58:07.770 回答
1

替代:

<bean class="yourpackage.A">
    <property name="relatedEntitiesMap">
        <map>
            <entry key="yourpackage.Agency">
                <list>
                    <bean class="yourpackage.EntityIndexConfig">
                        <constructor-arg value="Package.listByAgency"/>
                        <constructor-arg ref="packageRepository" />
                        <constructor-arg value="agencyId" />
                    </bean>
                </list>
            </entry>
        </map>
    </property>
</bean>

<bean id="packageRepository" class="yourpackage.PackageRepository" />
于 2013-10-19T02:15:34.943 回答
0

如果需要,您可以定义 bean 并将它们作为键和值引用,但如果您问我,这有点矫枉过正:

<bean id="listElementBean"/>
<bean id="keyBean" class="java.lang.Class" factory-method="forName">
    <constructor-arg value="com.MyClass"/>
</bean>
<bean id="valueBean" class="java.util.ArrayList">
    <constructor-arg>
        <list>
            <ref bean="listElementBean" />
        </list>
    </constructor-arg>
</bean>
<util:map>
    <entry key-ref="keyBean">
        <ref bean="valueBean" />
    </entry>
</util:map>
于 2013-10-19T01:55:35.977 回答