2011-04-04 65 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; 
    } 
}