@Qualifier注解:Spring框架Dao对应多个实现类的解决方式

前言:当我们学习自动装配时,通过@Autowired来实现对象的自动创建,这时可以将setter方法删除

可以删除setter方法的原因:

  • 自动装配基于反射设计创建对象并通过暴力反射为私有属性进行设值
  • 普通反射只能获取public修饰的内容
  • 暴力反射除了获取public修饰的内容还可以获取private修改的内容
  • 所以此处无需提供setter方法

问题:@Autowired是按照类型注入,那么对应BookDao接口如果有多个实现类,比如添加
BookDaoImpl2

@Repository
public class BookDaoImpl2 implements BookDao {
	public void save() {
		System.out.println("book dao save ...2");
	}
}

此时,系统会报错,现实无法区分到底注入哪个对象

解决方案: 按照名称注入

1. 先给两个Dao类分别起个名称

1 @Repository("bookDao")
2 public class BookDaoImpl implements BookDao {
3 public void save() {
4 System.out.println("book dao save ..." );
5 }
6 }
7 @Repository("bookDao2")
8 public class BookDaoImpl2 implements BookDao {
9 public void save() {
10 System.out.println("book dao save ...2" );
11 }
12 }

2. @Qualifier注解实现按照名称注入

当根据类型在容器中找到多个bean,注入参数的属性名又和容器中bean的名称不一致,这个时候该如
何解决,就需要使用到@Qualifier来指定注入哪个名称的bean对象。

@Service
public class BookServiceImpl implements BookService {
	@Autowired
	@Qualifier("bookDao1")
	private BookDao bookDao;
	public void save() {
		System.out.println("book service save ...");
		bookDao.save();
	}
}

@Qualifier注解后的值就是需要注入的bean的名称。
注意:@Qualifier不能独立使用,必须和@Autowired一起使用

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值