[英]Spring: Two beans implementing one interface with one as @Primary - autowiring creates both beans
一個接口: BeanMapperUtil
兩個實現bean:
OrikaBeanMapper
單例豆並標記為@Primary
DirectBeanMapper
原型bean 在經理課程中:
@Autowired
BeanMapperUtil mapper;
觀察: Spring同時創建OrikaBeanMapper
和DirectBeanMapper
,然后自動裝配OrikaBeanMapper
。
預期:由於OrikaBeanMapper
已經被標記為@Primary
,Spring應該只創建這個bean並自動裝配它。 Spring不需要創建DirectBeanMapper
的實例。 這對性能/功能沒有影響,但是這看起來像浪費實例的創建,只能將其丟棄。
當您的應用程序啟動時,Spring容器會創建所有在其中注冊的bean(期望原型bean)的實例,並將該bean存儲在BeanFactory中。
因此,所有的bean都被立即創建,並且只有BeanMapperUtil被注入,因為它用於自動裝配。
創建所有匹配的bean之后, @Primary
用作過濾器。 它並非旨在防止查找和創建其他非主匹配的Bean。
當Spring嘗試自動BeanMapperUtil
,它將找到兩個匹配項OrikaBeanMapper
和DirectBeanMapper
,並且兩者都將被創建。 此時, @Primary
開始起作用。 Spring將選擇帶有@Primary
批注的bean進行注入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.