项目中通常定义接口与实现类,Service 与 ServiceImpl ,使用实现类使用 @Autowire 或者 @Resource
@Autowire
根据类型注入
@Resource
根据名称注入,其次按照类型注入
@Qualifier("service")
其指定具体的实现类,与@Autowire 一起使用,可以指定类型与名称
使用@Autowire 注入的时候,注入接口类 UserService,实现类标记@Service 实现UserService ,这样就会自动找到UserService 类以及他的子类。但是当UserService 有多个字类实现类的时候,注入的是哪个呢?会造成冲突,
所哟@Autowire 注入的时候需要保证实现类只有一个。
@Resource 使用名称进行匹配,如果没有找到相同名称的Bean ,则会按照类型匹配。而实现类一般直接写@Service ,而实现类的Bean 名称实际上是 userServiceImpl , 则无法匹配到 @Resource 的name ,即会进行类型匹配。
如果需要一次匹配,需要在实现类上标注名字@Service("userService") ,这样在 @Resource 注入的时候一次匹配就可以