代码之家  ›  专栏  ›  技术社区  ›  Salman Paracha

基于区域变量的bean属性动态注入

  •  3
  • Salman Paracha  · 技术社区  · 16 年前

    考虑下面的类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>
    

    从上面的示例中,您可以看到DialogBean的Height属性正由PropertyPlaceholderConfigurator获取。

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

    那么,如何使用上面描述的bean定义将特定于客户机的高度参数注入到Dialogbean中,客户机ID存储为java.util.locale对象中的变量?

    有没有一种方法可以传递到自定义bean工厂后处理器运行时数据,比如locale?

    2 回复  |  直到 16 年前
        1
  •  1
  •   skaffman    16 年前

    听起来你需要一个 ResourceBundle 或者,用春天的话来说, MessageSource . 将其注入bean,并以编程方式解析运行时所需的值。

    信息源 可以包装基本的 资源束 更容易使用。

        2
  •  1
  •   Salman Paracha    16 年前

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

    • 每个局部变量声明一个bean,并从父(基)bean扩展。
    • 为接受区域设置的BeanFactory创建一个瘦包装器
    • 在查找基于区域设置的bean时,包装器从父(基)bean名称和区域设置创建bean名称选项
    • 遍历bean定义名称列表,找到第一个与创建的名称选项列表匹配的名称。

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

    推荐文章