具有动态键和值的 Spring bean 映射

Jav*_*vee 5 java spring hashmap spring-ioc

现在我在 spring bean 映射中拥有应用程序相关的数据,并将该映射传递给其他类作为参考。

地图定义如下

<bean id="sampleMap" class="java.util.HashMap">
    <constructor-arg index="0" type="java.util.Map">
        <map key-type="java.lang.Integer" value-type="java.lang.Float">
            <entry key="1" value="5"/>
            <entry key="2" value="10"/>
            <entry key="3" value="15"/>             
        </map>
    </constructor-arg>
</bean>
Run Code Online (Sandbox Code Playgroud)

该映射在其他 bean 中被称为

<bean id="config" class="com.example.Config" abstract="false">      
    <property name="sampleMap" ref="sampleMap"/>
    .
    .
</bean>
Run Code Online (Sandbox Code Playgroud)

我只想从数据库表中检索映射值并将其注入到其他类中。我怎样才能在春天做到这一点。基本上该表包含与应用程序相关的数据。map 的键和值将是 int,Configuration。

加载配置数据的最佳位置是什么?我们可以使用 spring beans map 来做,还是有其他好的方法来从数据库加载配置并在应用程序的其他地方(如服务、委托和 DAO)引用该配置?

帮助将不胜感激

谢谢

kan*_*kan 3

你应该使用 spring 的FactoryBean.

public class MyHashMapFactoryBean implements FactoryBean<Map<Integer, Float>>{

  @Autowired
  private Datasource datasource; 

  public Map<Integer, Float> getObject(){
    return <load from database>;
  }

  public Class<Map> getObjectType() { return Map.class ; }

  public boolean isSingleton() { return true; }
}

<bean id="sampleMap" class="my.package.MyHashMapFactoryBean">
  <here you could pass some properties e.g. jdbc datasource>
</bean>
Run Code Online (Sandbox Code Playgroud)