Bean名称中的"&"含义是什么?Spring Qualifier注解中"&"作用解析
Spring中"&"符号的两个常见场景解析
1. Bean名称中的"&"代表什么?
这个符号其实和Spring的FactoryBean接口直接相关。FactoryBean是Spring里一种特殊的Bean类型——它本身是一个Bean,但核心作用是生成另一个Bean对象(通过getObject()方法)。
默认情况下,当你通过Bean名称从Spring容器获取实例时,拿到的是FactoryBean生成的目标对象。但如果在Bean名称前加上&符号,你获取到的就是FactoryBean这个Bean本身的实例了。
举个简单例子:
假设我们定义了一个UserFactoryBean实现FactoryBean<User>,并注册到容器中,Bean名称为userFactory。
- 调用
applicationContext.getBean("userFactory")→ 返回User类型的实例(FactoryBean生成的对象) - 调用
applicationContext.getBean("&userFactory")→ 返回UserFactoryBean类型的实例(FactoryBean本身)
2. @Qualifier注解中出现"&"的定义与作用
理解了上面的FactoryBean逻辑,这个问题就很好解释了:当你需要注入FactoryBean本身,而不是它生成的目标对象时,就可以在@Qualifier的参数里加上&前缀。
通常我们用@Autowired配合@Qualifier时,注入的是FactoryBean产出的对象,但如果业务场景需要直接操作FactoryBean(比如调用它的自定义方法、修改配置属性),就可以这么写:
@Autowired @Qualifier("&userFactory") private UserFactoryBean userFactoryBean;
这种用法确实比较少见,因为大多数情况下我们只关心FactoryBean生成的最终对象,但在一些需要对Bean创建过程做自定义控制的场景中,它就能派上用场。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

