一个界面:BeanMapperUtil
两个实施bean:
OrikaBeanMapper
- Singleton bean并标记为@Primary
DirectBeanMapper
- 原型bean 在Manager类中:
@Autowired
BeanMapperUtil mapper;
观察:Spring会同时创建OrikaBeanMapper
和DirectBeanMapper
,然后自动加载OrikaBeanMapper
。
预期:由于OrikaBeanMapper
已标记为@Primary
,因此Spring应仅创建此bean并自动加载它。 Spring不需要创建DirectBeanMapper
的实例。对性能/功能没有影响,但这看起来像浪费的实例创建只是被丢弃。
答案 0 :(得分:0)
当你的应用程序启动时,Spring容器会创建所有bean的实例(期望原型bean),这些bean在那里注册并将该bean存储在BeanFactory中。
因此,所有bean都是一次创建的,只有BeanMapperUtil被注入,因为它用于自动装配。
答案 1 :(得分:0)
@Primary
用作过滤器。它的目的不是阻止查找和创建其他非主要匹配bean。
当Spring尝试自动装配BeanMapperUtil
时,它会找到两个匹配项OrikaBeanMapper
和DirectBeanMapper
,并且两者都将被创建。此时@Primary
开始发挥作用。 Spring将选择带注释@Primary
注释的bean。