使用一些预定义值初始化PriorityBlockingQueue

时间:2013-07-22 16:42:54

标签: java spring

我在Spring IOC Framework中使用java。 我正在处理现有的应用程序,我需要对某段代码进行更改

我在核心xml文件中有这一行

<bean name="SymQ" class="java.util.concurrent.PriorityBlockingQueue" />

和java代码中的这个

private PriorityBlockingQueue<String> SymQ;

是否可以以任何方式使用某些预定义值初始化SymQ。 例如,我需要PriorityBlockingQueue具有一些预定义的值,如FF , DD , NJ

3 个答案:

答案 0 :(得分:1)

您可以使用MethodInvokingFactoryBeanSymQ bean上调用方法(特别是addAll方法)。在声明bean之后添加一些这样的配置:

<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
   <property name="targetObject" ref="SymQ"/>
   <property name="targetMethod" value="addAll"/>
   <property name="arguments">
      <list>
          <value>FF</value>
          <value>DD</value>
          <value>NJ</value>
      </list>
   </property>      
</bean>

答案 1 :(得分:1)

您可以使用List作为PriorityBlockingQueue

的构造函数参数
<bean name="symQ" class="java.util.concurrent.PriorityBlockingQueue">
    <constructor-arg>
        <list value-type="java.lang.String">
            <value>FF</value>
            <value>DD</value>
            <value>NJ</value>
        </list>
    </constructor-arg>
</bean>

不相关但请注意Spring docs

  

约定是在命名bean时使用标准Java约定作为实例字段名称。

在这种情况下,bean名称变为symQ

答案 2 :(得分:1)

从收到的观点来看,您收到的答案都是正确的。然而,根据我的经验,设计在编程方面被大大低估了,我是第一个低估其重要性的人。

您需要在应用程序上下文中向队列添加默认数据这一事实表明您正在使用过低的抽象级别。

您最好创建一个Symq类,它暴露您的业务方法,并由优先级队列支持。在Symq的构造函数中,您将通过添加一些初始值来初始化队列。构造函数是初始化非惰性内部数据结构的正确位置