当你一个接口的实现类有多个的时候,你经过
@Component
来注册你的实现类有多个,可是在注入的时候使用@Autowired
java
这样问题就来了,Spring就不知道你注入哪一个,那如今就能够经过下面两个办法解决:spring
@Primary
优先考虑,优先考虑被注解的对象注入@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>
上面声明了,下面用ui
public class MovieRecommender { @Autowired @Qualifier("main") private MovieCatalog movieCatalog; // ... }
注解 | 备注 |
---|---|
@Primary |
优先方案,被注解的实现,优先被注入 |
@Qualifier |
先声明后使用,至关于多个实现起多个不一样的名字,注入时候告诉我你要注入哪一个 |