首先需要明白的是依赖注入和控制反转说的是同一件事。依赖注入(DI)是控制反转的实现方式之一。在容器启动将类创建到容器之中,在需要的地方,创建对应的类。
@Service
public class UserServiceImpl implements IUserService {
@Autowired
private UserRepository userRepository;
@Override
public void addUser(UserDto dto) {
User user = new User();
user.setAge(dto.getAge());
user.setBirth(dto.getBirth());
user.setName(dto.getName());
userRepository.save(user);
}
在之前,如果我们要使用UserRepository,必须要创建一个对象,现在不需要了,UserRepository的创建由容器完成。
容器知道要创建那些bean吗
@Component 实现bean的注入,底下和它作用一样,为了方便描述页面,衍生出来的。
@Repository 数据dao层
@Service 业务服务
@Controller web层
容器知道那些类需要注入特定的bean吗
@AutoWired
找到一个 成功
没找到 失败
找到多个 失败,@Primary 可以加在其中一个,他优先级会最高,也可以。或者使用@Qualifier添加区分
@Service
public class UserTestServiceImpl implements IUserService
@Service
public class UserServiceImpl implements IUserService
public class UserController {
@Autowired
private IUserService userService;
}
就会报错
Field userService in com.zuiuxi.plan.controller.UserController required a single bean, but 2 were found:
- userServiceImpl: defined in file [E:\svn\source\demo-3\target\classes\com\zuiuxi\plan\service\Impl\UserServiceImpl.class]
- userTestServiceImpl: defined in file [E:\svn\source\demo-3\target\classes\com\zuiuxi\plan\service\Impl\UserTestServiceImpl.class]
@Service
@Primary
public class UserServiceImpl implements IUserService
加上@Primary,UserServiceImpl的优先级高了。就不会找到两个
@RequestMapping("/user")
@Api(tags = "用户的api")
@RestController
public class UserController {
@Autowired
@Qualifier(value="user")
private IUserService userService;
}
@Service
@Qualifier(value="user")
public class UserServiceImpl implements IUserService
@Service
@Qualifier(value="usertext")
public class UserTestServiceImpl implements IUserService
加了区分之后,自然也就只能找到对应的