Добавление дополнительных значений к свойству существующего компонента - PullRequest
1 голос
/ 04 апреля 2011

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

Или иначе: как я могу установить свойство несколько раз для существующий бин?

Стандартный синтаксис <bean id="..." class="...."> всегда создает новый бин.

Я пытался создать бин "appender", сделать его не ленивым, но по какой-то причине,бин paths не внедряется:

public class Appender {
     private Paths paths;

     // Never called :-(
     @Required @Autowired
     public void setPaths( Paths paths ) { this.paths = paths; }

     public void setAdditionalPaths( List<String> paths ) {
          this.paths.add( paths );
     }
}

и в конфигурации Spring:

<bean id="addMorePaths" class="Appender" depends-on="paths" lazy-init="false">
     <property name="additionalPaths">
         <list>...</list>
     </property>
</bean>

1 Ответ

2 голосов
/ 04 апреля 2011

Вы можете реализовать это как BeanPostProcessor:

public class Appender implements BeanPostProcessor {
     private List<String> paths;

     public void setAdditionalPaths( List<String> paths ) {
          this.paths = paths;
     }

     public Object postProcessAfterInitialization(String name, Object bean) {
         if ("paths".equals(name)) {
             ((Paths) bean).add(paths);
         }
         return bean;
     }

     public Object postProcessBeforeInitialization(String name, Object bean) {
         return bean;
     }
}
...