2013-07-22 4 views
0

Я использую java с Spring IOC Framework. Я работаю на существующей заявке, и мне нужно, чтобы внести изменения в определенной части кодаИнициализировать PriorityBlockingQueue с некоторыми предопределенными значениями

У меня есть эта строка внутри основного XML-файла

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

и это внутри кода Java

private PriorityBlockingQueue<String> SymQ; 

Возможно ли каким-либо образом инициализировать SymQ с некоторыми предопределенными значениями. Например, мне нужен PriorityBlockingQueue с некоторыми предопределенными значениями, например FF , DD , NJ?

+2

Да, это возможно. –

ответ

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> 

Unrelated но запиской от Spring docs:

соглашение заключается в том, чтобы использовать стандартное соглашение Java для имен полей экземпляра при названии beans.

В этом случае имя боб становится symQ

+0

Большое спасибо, должен ли я использовать util: list или java: util: list – Kiran

+0

Использовать 'util: list' - это стандартный' Spring'. Фактически, как только вы определили пространство имен, вы можете просто использовать 'list', как указано выше – Reimeus

1

Вы можете использовать метод MethodInvokingFactoryBean, чтобы позвонить методу на вашем фасоли SymQ (в частности, метод addAll). Добавьте конфигурации, как это после того, как боб объявлен:

<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

Ответ, который вы получили оба правильно от как точку зрения. Однако по моему опыту дизайн в значительной степени недооценивается в программировании, и я был первым, кто недооценил его важность.

Тот факт, что вам нужно добавить данные по умолчанию в очередь в контексте приложения, предполагает, что вы работаете с уровнем абстракции, который является слишком низким.

Лучше создать класс Symq, который раскрывает ваши бизнес-методы и который поддерживается приоритетной очередью. В конструкторе Symq вы инициализируете очередь, добавляя некоторые начальные значения. Конструктор - это правильное место для инициализации не ленивых внутренних структур данных.

Смежные вопросы