user类、user的两个实现类:userImpl和userImpl2
直接运行时报错,因为spring不知道用哪一个:
Field userService in com.kmu.springtest.controller.UserController required a single bean, but 2 were found:
- userImpl: defined in file [D:\ideaProject\spring-test\target\classes\com\kmu\springtest\service\impl\UserImpl.class]
- userImpl2: defined in file [D:\ideaProject\spring-test\target\classes\com\kmu\springtest\service\impl\UserImpl2.class]
需要指定用哪一个:
1、使用@Qualifier("implName")指定名字
@Qualifier("userImpl")
@Autowired
UserService userService;
2、实例名命名其为 首字母小写的实现类名
@Autowired
UserService userImpl2;
3、在需要注入的实现类上标注@Primary
@Primary
@Service
public class UserImpl2 extends ServiceImpl<UserDao, User> implements UserService {
...
}
同一类型实现类只能有一个@Primary注解,否则报错
4、在实现类上标注@Priority(int)指定优先级,数字越小优先级越高
@Priority(1)
@Service
public class UserImpl2 extends ServiceImpl<UserDao, User> implements UserService {
...
}
优先级:byType > byName
@Primary>@Priority>@Qualifier>实例名