依赖注入(DI)和控制反转(IoC)简介

本文探讨了Spring Boot中依赖注入如何工作,如何决定哪个@Service或@Repository被注入,以及如何通过@Qualifier和@Primary解决bean冲突。重点介绍了如何利用这些注解进行bean的精准定位和优先级设置。
摘要由CSDN通过智能技术生成

首先需要明白的是依赖注入和控制反转说的是同一件事。依赖注入(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

加了区分之后,自然也就只能找到对应的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我的天才女友

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值