0

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

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

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

这在java代码里面

private PriorityBlockingQueue<String> SymQ;

有没有可能我可以SymQ用一些预定义的值来初始化。例如,我需要带有一些预定义值的 PriorityBlockingQueue,例如FF , DD , NJ

4

3 回答 3

0

您可以使用MethodInvokingFactoryBean来调用SymQbean 上的方法(特别是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>
于 2013-07-22T16:49:56.807 回答
0

从如何的角度来看,您收到的答案都是正确的。然而,根据我的经验,设计在编程中被大大低估了,我是第一个低估它重要性的人。

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

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

于 2013-07-22T20:18:39.683 回答
0

您可以使用 aList作为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 文档的注释:

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

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

于 2013-07-22T16:52:55.200 回答