例如,在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);
}
答案 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上下文,通常最好实现更具体的ResourceLoaderAware,ApplicationEventPublisherAware或MessageSourceAware接口能够。
请注意,如果您实现了这些接口中的任何一个,那么您将不再拥有POJO并且与Spring相关联。在这样做之前要仔细考虑。