@Primary/@Qualifier
当你一个接口的实现类有多个的时候,你通过
@Component
来注册你的实现类有多个,但是在注入的时候使用@Autowired
这样问题就来了,Spring就不知道你注入哪个,那现在就可以通过下面两个办法解决:
@Primary
优先考虑,优先考虑被注解的对象注入@Qualifier
名字声明,声明后对名字进行使用
@Qualifier 看看官网怎么用
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-config/>
<bean class="example.SimpleMovieCatalog">
<qualifier value="main"/>
<!-- inject any dependencies required by this bean -->
</bean>
<bean class="example.SimpleMovieCatalog">
<qualifier value="action"/>
<!-- inject any dependencies required by this bean -->
</bean>
<bean id="movieRecommender" class="example.MovieRecommender"/>
</beans>
上面声明了,下面用
public class MovieRecommender {
@Autowired
@Qualifier("main")
private MovieCatalog movieCatalog;
// ...
}
理解
注解 | 备注 |
---|---|
@Primary | 优先方案,被注解的实现,优先被注入 |
@Qualifier | 先声明后使用,相当于多个实现起多个不同的名字,注入时候告诉我你要注入哪个 |