Redian新闻
>
Spring 中的 Service 有多个实现类,怎么注入?

Spring 中的 Service 有多个实现类,怎么注入?

公众号新闻

方法一:Controller中注入service的时候使用@Autowired自动注入,@Qualifier("beanId")来指定注入哪一个。

方法二:Controller中注入service的时候使用@Resource(type = 类名.class)来指定注入哪一个。

方法三:

  1. 每个service的impl都可以指定名称(使用@Service(“名称”)
  2. Controller中注入service的时候使用名称来指定注入哪一个(使用@Resource(name="名称"))。

1@Service注解,其实做了两件事情:

1、声明TeacherServiceImpl.java是一个bean。因为TeacherServiceImpl .java是一个bean,其他的类才可以使用@Autowired将TeacherServiceImpl 作为一个成员变量自动注入。

2、TeacherServiceImpl.java在bean中的id是"teacherServiceImpl ",即类名且首字母小写。

注意:不能有同名的,不然要报错。

2@Autowired注解的意思就是:

当Spring发现@Autowired注解时,将自动在代码上下文中找到和其匹配(默认是类型匹配)的Bean,并自动注入到相应的地方去。

@Resource的作用相当于@Autowired

ChatGPT中文网站:https://ai.cxyquan.com/  

3@Autowired和@Resource两个注解的区别:

1.@Autowired是Spring的注解,@Resource是J2EE的注解,这个看一下导入注解的时候这两个注解的包名就一清二楚了。

2.@Autowired默认按照byType方式进行bean匹配,@Resource默认按照byName方式进行bean匹配。

3.@Autowired默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false)

方法一、二代码如下:

接口

public interface HumanService {
    public String name();
}

接口实现类

@Servicepublic class TeacherServiceImpl implements HumanService {
    @Override
    public String name() {
        System.out.println("teacher");
        return "teacher";
    }
}
@Servicepublic class DoctorServiceImpl implements HumanService {
    @Override
    public String name() {
        System.out.println("doctor");
        return "doctor";
    }
}

控制器

@RestController
public class HumanController {
    //    @Resource(type = DoctorServiceImpl.class) //方法二
    @Autowired
    @Qualifier("teacherServiceImpl")
    private HumanService humanService;

    @RequestMapping("/name")
    public String name(){
        return humanService.name();
    }
}

方法三代码如下:

接口

public interface HumanService {
    public String name();
}

接口实现类

@Service("teacherService")
public class TeacherServiceImpl implements HumanService {
    @Override
    public String name() {
        System.out.println("teacher");
        return "teacher";
    }
}
@Service("doctorService")
public class DoctorServiceImpl implements HumanService {
    @Override
    public String name() {
        System.out.println("doctor");
        return "doctor";
    }
}

控制器

@RestController
public class HumanController {

    @Resource(name="doctorService")
    private HumanService humanService;

    @RequestMapping("/name")
    public String name(){
        return humanService.name();
    }
}

来源:cnblogs.com/zoe-java/p/11530888.html

后端专属技术群

构建高质量的技术交流社群,欢迎从事编程开发、技术招聘HR进群,也欢迎大家分享自己公司的内推信息,相互帮助,一起进步!

文明发言,以交流技术职位内推行业探讨为主

广告人士勿入,切勿轻信私聊,防止被骗

加我好友,拉你进群

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
SpringBoot 快速实现IP地址解析现诵《SPRING HOLIDAY偶题 》by AP/盈盈/K2组合2岁男童温泉戏水后暴亡,出现类流感症状!凶手竟是...SpringBoot + Docker 实现一次构建到处运行~Nature子刊 | 樊春海院士/李江合作开发框架核酸状态机实现CRISPR系统在活细胞中的分级输运硅谷巨头谷歌/Meta/Adobe放出多个实习/初级岗位, 留学生冲!他打老婆?理所当然?Olympic Stage Set, Young Chinese Dance to the Breaking BeatYoung Chinese Obsess Over MBTI, the American Personality TestCCTV Report Sparks Outcry Over Heritage Preservation in GansuAfter Exposé, Chinese Firm Under Lens For Hiding Mining Deaths有感于隔壁child protect service 社工上门, 问问摸孩子屁股这件事(内心阴暗或没生过孩子的别进来了)[歪解] customer service representative孩子不爱吃肉,怎么保证钙和锌的摄入?错觉Vue+SpringBoot 集成 PageOffice 实现在线编辑Word、excel文档外籍人士赴华签证服务!Visa Services For Foreigners To China基于 SpringBoot 实现多租户架构:支持应用多租户部署和管理直肠癌患者为了更好的护理造口饮食上该怎么注意?LK-99超导验证重大进展!多个实验室宣称有望复现!又四点【尔湾房产】南加州橙县Irvine全新Portola Springs楼盘4卧新房【2023.09.15】美之信为外籍人士提供赴华签证服务!Visa Services For Foreigners To China推荐35款 SpringBoot/SpringCloud 开源项目,附源码BC省顶级!博莱特民宅/商业清洁服务,Brighter Cleaning Services Inc.揭秘Spring依赖注入和SpEL表达式SpringBoot 集成 EasyExcel 3.x 优雅实现 Excel 导入导出五十六 支农美国实习直推|纽约金融科技公司招聘BA、SDE等多个实习岗位五十五 课堂上12306回应乘客补票被赶下车:超员严重时会出现类似情况【冯站长说安全】2023年9月30日怀孕会重塑女性的大脑;感冒后,也可能出现类似长新冠的“长期感冒”症状 | 环球科学要闻SpringBoot+Mybatis 如何实现流式查询,你知道吗?In Northeast China, a New ‘Fangcang’ Hospital Sparks UproarSpringBoot 整合 MinIO 实现视频的分片上传/断点续传(亲测可行)【LEAP eSalon】 Level Up Your Career in Financial Services洛杉矶14天成功办理美国护照更新+中国签证!Visa Services For Foreigners To China!
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。