关于@Autowired注释的问题

关于@Autowired注释的问题

以下代码中,如果OrderDao接口有多个实现类,那通过@Autowired注释实例化的是哪个实现类?

@Service
public class OrderServiceImpl implements OrderService {

   @Autowired
   private OrderDao orderDao;
   @Autowired
   private ProductDao productDao;

   public void addOrder(Order order) {
       order.setCreateTime(new Date());
       order.setStatus("待付款");
       orderDao.insert(order);
       Product product = productDao.select(order.getProductsId());
       product.setStock(product.getStock() - order.getNumber());
       productDao.update(product);
   }
}


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,不需要在xml中创建bean。在spring-dao.xml文件中,有如下的包扫描:

http://img1.sycdn.imooc.com//climg/5e203fbd09eab6fb06600049.jpg

扫描dao包下所有的类。

在orderDaoImpl类上有@Repository,

http://img1.sycdn.imooc.com//climg/5e203ede096f4a7606060144.jpg

当扫描到@Repository注解后,会生成对应的bean注入到spring容器中,所以不需要在xml文件中配置bean。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 慕沐8221787 提问者 #1
    我说的是接口下存在多个实现类的情况,按你这种办法,如何确定注入的是哪个实现类呢?
    2020-01-16 21:17:19
  • 好帮手慕阿莹 回复 提问者 慕沐8221787 #2
    同学你好,如果有多个实现类,可以在用@Repository(value=“****”)具体的名字来区分。到时候,用@Autowired需要配合@Qualifier("*****") 来用就可以了。或者@Resource(name=“*****”)来获取对应的就可以了。祝学习愉快
    2020-01-17 10:07:57
  • 慕沐8221787 提问者 回复 好帮手慕阿莹 #3
    那value的值怎么取值?具体有什么要求,希望解答能完整些。
    2020-01-17 10:15:29
好帮手慕阿莹 2020-01-16 12:00:25

同学你好,如果有多个实现类,使用@Autowired就无法辨别了

需要配合@Qualifier("名称") 来使用

或者使用@Resource配合名称来使用

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!


  • 提问者 慕沐8221787 #1
    那是不是必须在xml文件中创建bean才行呢?
    2020-01-16 17:06:45
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
SSM主流框架入门与综合项目实战2018版
  • 参与学习           人
  • 提交作业       205    份
  • 解答问题       4317    个

Java中非常实用的SSM整合开发内容,从Spring开始,到MyBaits的进阶内容,再到SpringMVC的应用,最后是SSM整合开发案例,逐步深入,助你成长为一名Java工程师!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师