关于@Service

关于@Service

# 具体遇到的问题
    ​这里的@Service不应该和接口保持一致吧,因为如果后期维护,我需要新增一个实现类,那如果两个实现类的@Service都长一样了,不就出现异常吗

    ​应该就使用默认的bean id (类名小写),到时候需要注入那个就把注入的注解改一下就好了
# 报错信息的截图

# 相关课程内容截图
http://img1.sycdn.imooc.com//climg/5fe4128909d3d41216000733.jpg# 尝试过的解决思路和结果

# 粘贴全部相关代码,切记添加代码注释(请勿截图)

在这里输入代码,可通过选择【代码语言】突出显示

正在回答

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

2回答

同学你好,刚是老师没有理解清楚,给您的学习带来不便,深感抱歉!请同学查看下方内容:

    1. 当出现相同类型的实现类,可以通过@Service括号中书写的bean名称来区分。如果@Service出现重名,可以通过@Autowired注解,默认是按照类去匹配。

    2.  @Autowired注解也可以配合@Qualifier 注解,按照名称去装配 bean。从而解决@Service重名的问题。

注:按照名称注入,是按照@Qualifier注解设置的名称进行注入。如下:

​    ​3. @Autowired默认按照类型进行匹配,如果存在相同类型的属性,则就需要按照@Qualifier注解添加的名称进行注入,如:写成:@Autowired @Qualifier("test")就是按照test名称进行装配。

祝学习愉快!

  • rock221 #1

    老师,并不对吧, 多个实现类都是实现同一个接口,那么它们的类型,应该都是此接口啊。 不可以按照类型去寻找吧,如果按照名字去寻找, 如果按照老师视频中这样写, 当前实现类的beanId= 接口的名字, 那其他实现类的名字怎么搞? 我还是不理解实现类的beanId为什么要写接口的名字?

    2021-05-31 11:14:29
  • rock221 #2

    一般我们采用的 声明创建,不都是创建接口的类型吗 ,然后名字指向实体类吗。 

    2021-05-31 11:21:57
  • rock221 #3
    @Resource
    private CategoryService categoryService;

    我在补充下我的问题:在测试用例中注入的类型为接口,名字为我们刚定义的beanid的实现类,那如果存在多个接口的实现类, 名字都一样, 通过类型查询,类型都是接口,无法识别吧 。如果

    2021-05-31 11:50:45
好帮手慕小尤 2020-12-24 15:59:52

同学你好, 是会出现同学描述的问题,不过一般情况下在一个项目中并不会创建相同名称的类,如果同学有所顾忌的话,同学可以命名为其他名称,不过名称需要见名知意哦~。

  • 提问者 皮皮鲁l #1

    不是说有两个相同名称的类,是两个实现类的注解都用接口类的名称定义@Servier(“接口类”),那就会有冲突吧,例:


    //接口类    

    public interface A{


    }


    //实现类1

    @Service("a")

    public class B{


    }


    @Service("a")

    public class C{


    }


    按照课程中的例子来说,在自动注入的时候就会出问题


    2020-12-24 16:05:55
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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