基于Spring中的语言环境变量动态注入bean属性

时间:2010-01-17 03:57:20

标签: java spring dependency-injection javabeans

考虑以下类DialgBean.java,它定义网页上对话框的属性。下面是类及其bean定义

public class DialogBean{
  private int height;

  public void setHeight(int height)
  ...
}

<bean id="dialogBean" class="org.springhelp.DialogBean">  
 <property name="height" value="${dialogBean.height}"/>
 ...
</bean>

从上面的例子中,您可以看到PropertyPlaceholderConfigurer正在获取DialogBean的height属性。

问题是我正在处理的应用程序支持多个客户端,并且大多数客户端对对话框的height参数有不同的要求。因此,我不能简单地从一个属性文件中提取height参数。

那么,如何使用上面描述的bean定义将客户端特定的height参数注入DialogBean,其中客户端id作为变量存储在java.util.Locale对象中?

有没有办法传递给自定义bean工厂后处理器运行时数据,如Locale?

2 个答案:

答案 0 :(得分:1)

听起来你需要一个ResourceBundle,或者用Spring的说法,MessageSource。将它注入到bean中,并以编程方式解析运行时所需的值。

MessageSource可以包装基本的ResourceBundle,并且更容易使用。

答案 1 :(得分:1)

更简单但更麻烦的解决方案是

  • 为每个本地变体声明一个bean,并从父(基本)bean扩展。
  • 为接受Locale
  • 的BeanFactory创建一个瘦包装器
  • 在查找基于Locale的bean时,包装器从父(基本)bean名称和Locale
  • 创建bean名称选项
  • 遍历bean defintion名称列表,找到与创建的名称选项列表匹配的第一个名称。

当然,选项列表必须按优先顺序排列。