直接从Spring配置文件中获取值

时间:2009-09-19 14:14:53

标签: java spring

例如,在Spring配置中,我有一个这样的地图 -

<util:map id="someMap"
    map-class="java.util.HashMap"
    key-type="java.lang.String"
    value-type="java.lang.String" >
    <entry key="A" value="Apple" />
    <entry key="B" value="Banana" />
    <entry key="C" value="Cherry" />
    <entry key="D" value="Durian" />        
    <entry key="Default" value="None" />   

现在,我有一个方法 -

private String getFruitName(){
     /* result should come from config depending on the 
        value of this.fruit [a fruit type which can be one 
        of the first four keys in the map.] */
}

如何直接将条件设置为spring配置文件,而不是通过从类中的方法中注入键来获取值?我可以在配置中使用条件语句,也可以将参数传递给配置吗?

我不想做像 -

这样的事情
if (someMap.containsKey(fruit)){
     fruitName = someMap.get(fruit);
}

2 个答案:

答案 0 :(得分:2)

用弹簧做这件事。

Spring将为您的bean提供配置和其他bean,它不打算用于提供这种逻辑。 someMap.get就是它的工作方式,或者只是将适当的水果直接注入你的bean。

答案 1 :(得分:1)

你真的不应该这样做,因为你只需在Bean中声明属性,然后使用Spring配置在你的Bean上设置属性。

如果由于某种原因必须这样做,Spring提供了一组接口,您可以实现这些接口以获得对Spring配置的不同级别的访问权限。主界面是ApplicationContextAware。如果实现此接口,Bean将在初始化期间传递应用程序上下文(通过调用setApplicationContext(ApplicationContext)方法),然后可以保存上下文并在其上调用方法以编程方式访问上下文。

要实际访问Map,只需调用getBean()ApplicationContext方法(继承自BeanFactory),传递Map bean的id。

例如:

private String getFruitName(){
    Map someMap = (Map)applicationContext.getBean("someMap");

    return (String)someMap.get(this.fruit);
}

您可以实现一些其他接口以更具体地访问Spring上下文,通常最好实现更具体的ResourceLoaderAwareApplicationEventPublisherAwareMessageSourceAware接口能够。

请注意,如果您实现了这些接口中的任何一个,那么您将不再拥有POJO并且与Spring相关联。在这样做之前要仔细考虑。