StaffController中注入问题

StaffController中注入问题

@Autowired
private StaffService staffService;
@Autowired
private DepartmentService departmentService;

注入的为什么是StaffService和DepartmentService,而不是他们的实现类StaffServiceImpl和DepartmentServiceImpl,传统写法是创建一个实现类的对象,然后调用方法的嘛,就像下面的这样写的


​MessageService messageService=new MessageServiceImpl();
messageService.delete(id);


正在回答 回答被采纳积分+1

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

2回答
好帮手慕阿园 2021-03-15 11:58:09

同学你好

​1、同学的理解是正确的

2、@Service("staffService1")  相当于 xml配置中得bean  id = service ,也可以不指定 不指定相当于是这个类的全限定名,表示给当前类命名一个别名,方便注入到其他需要用到的类中;不加的话,默认别名就是当前类名,但是首字母小写;如果是按类型注入,有相同的类型则需要用到名称

3、@Service注解在实现类上,生成的是实现类的bean

祝学习愉快~

好帮手慕小尤 2021-03-14 19:00:48

同学你好,@Autowired是按类型装配bean。如:DepartmentServiceImpl是DepartmentService的实现类,属于DepartmentService类型的并在service中,@Service注解在实现类上,也就是生成名为departmentService的bean。如下图所示:

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

    departmentController类中注入departmentService时,就是注入该departmentService。注入的是实现类,不是接口(DepartmentService)。

祝学习愉快!

  • 提问者 视线模糊 #1

    老师,你的意思是不是这样的:

    在StaffController中使用标签@Autowired注入了StaffService、DepartmentService,这个其实注入的是StaffServiceImpl、DepartmentServiceImpl两个实现类,而这两个实现类是因为在StaffServiceImpl中有注解@Service("staffService"),DepartmentServiceImpl中有注解@Service("deparmentService"),所以能找到这个实现类,但是我将StaffServiceImpl中d注解@Service("staffService1"),程序依然能正常运行,这个注解@Service(""),括号里面的名字在使用标签@Autowired的时候其实是没什么用处的是吧?

    还有老师说“@Service注解在实现类上,也就是生成名为departmentService的bean”,注解在实现类上为什么不是生成departmentServiceImpl的bean喃?

    @Service("staffService")


    StaffController中的代码:
    @Autowired
    private StaffService staffService;
    @Autowired
    private DepartmentService departmentService;




    2021-03-14 20:22:59
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星

相似问题

登录后可查看更多问答,登录/注册

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

在线咨询

领取优惠

免费试听

领取大纲

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