2011-04-04 64 views
1

在我的配置中,我有一个bean paths。现在取决于读取哪个配置文件,我需要添加路径到此属性。向现有bean的属性添加更多值

或者换句话说:我如何在现有的 bean上多次设置属性?

标准语法<bean id="..." class="....">总是创建一个新的bean。

我试图创建一个“附加器”豆,作出这样的非懒,但由于某种原因,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> 

回答

2

您可以实现它作为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; 
    } 
}