我想在使用Bean的@Bean
類型定義時使用Spring的bean繼承。具體來說,讓如何使用@Bean註釋配置子Bean
public class Serwis {
Integer a;
Integer b;
Map<Integer, Integer> m = new HashMap<>();
}
,並假設基於XML的配置看起來像:
<bean id="absSerwis" class="service.Serwis"
p:a="11">
<property name="m">
<map>
<entry key="111" value="111"></entry>
</map>
</property>
</bean>
<bean id="defSerwis" parent="absSerwis"
p:b="12"
/>
這確實創建一個包含豆absSerwis
的深層副本豆defSerwis
;特別是m
的內容被複制。現在,我想定義豆類喜歡用@Bean
註解defSerwis
,像
@Autowired
@Qualifier("absSerwis")
private Serwis absSerwis;
@Bean
public Serwis cccSerwis() {
Serwis s = new Serwis();
BeanUtils.copyProperties(absSerwis, s); //wrong; does shallow copy
return s;
}
是什麼做的正確方法?
你對家長的理解是有點偏離。它所做的只是將兩個bean定義合併在一起,然後構建事物。它沒有形成一個深刻的/新鮮的副本,沒有這樣的事情。只要創建一個方法來創建你的'absSerwis'(注意不用'@ Bean'註釋它!)。然後創建2個'@ Bean'方法,1顯示原始信號'absSerwis',另一個添加一些屬性。 –
@ M.Deinum「一點點」:這可能是這種情況:)。你能否指出一個能夠詳細闡述xml的父類如何工作的地方。 –
查看我的回答(以及鏈接,參考Spring參考指南)。 –