作者:zoe_java

cnblogs.com/zoe-java/p/11530888.html

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

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

方法三:

  1. 每个service的impl都可以指定名称(使用@Service(“名称”)

  2. Controller中注入service的时候使用名称来指定注入哪一个(使用@Resource(name="名称"))。

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

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

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

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

@Autowired注解的意思就是:

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

@Resource的作用相当于@Autowired

@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 {@Overridepublic String name() {System.out.println("teacher");return "teacher";}
}
@Servicepublic class DoctorServiceImpl implements HumanService {@Overridepublic 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 {@Overridepublic String name() {System.out.println("teacher");return "teacher";}
}
@Service("doctorService")
public class DoctorServiceImpl implements HumanService {@Overridepublic 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();}
}

推荐好文

>>【练手项目】基于SpringBoot的ERP系统,自带进销存+财务+生产功能>>分享一套基于SpringBoot和Vue的企业级中后台开源项目,代码很规范!
>>能挣钱的,开源 SpringBoot 商城系统,功能超全,超漂亮!

Spring中如Service有多个实现类,它怎么知道该注入哪个ServiceImpl类?相关推荐

  1. spring扩展点之二:spring中关于bean初始化、销毁等使用汇总,ApplicationContextAware将ApplicationContext注入...

    <spring扩展点之二:spring中关于bean初始化.销毁等使用汇总,ApplicationContextAware将ApplicationContext注入> <spring ...

  2. Spring中同一个service中方法相互调用事务不生效问题解决方案

    问题描述: 我们在用Spring框架开发Web项目过程中,经常需要用同一个service中的一个方法调用另一个方法,如果此时调用方没有添加事务注解@Transactional,而在被调用方添加事务注解 ...

  3. Spring中同一个service类中方法相互调用事务不生效问题解决方案

    此处的this指向目标对象,因此调用this.b()将不会执行b事务切面,即不会执行事务增强,因此b方法的事务定义@Transactional(propagation = Propagation.RE ...

  4. Spring中的@ Component,@ Repository和@Service批注有什么区别?

    @Repository @Component , @Repository和@Service批注可以在Spring中互换使用吗,或者除了充当注解设备外,它们还提供任何特定功能吗? 换句话说,如果我有一个 ...

  5. Spring中策略模式实现方法

    一.定义 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改.这种类型的设计模式属于行为型模式.在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而 ...

  6. Spring中的面向切面(AOP)

    AOP解决的问题:把横切关注点与业务逻辑相分离,即可以实现横切关注点与他们所影响的对象之间的解耦. 什么是横切关注点呢?它可以被描述为影响应用多个地方的功能.亦或者理解为辅助功能.比如日志.安全.缓存 ...

  7. spring中依赖注入方式总结

    文章来源于今日头条用户:分布式系统架构 一.注解注入 注解注入在Spring中是用的最多的一种方式,就是在java代码中使用注解的方式进行装配,在代码中加入@Resource或者@Autowired. ...

  8. Spring中@component的使用

    Spring中@component的使用 @component是spring中的一个注解,它的作用就是实现bean的注入,在探究@component前先了解一下注解?何为注解?注解本质上就是一个类,开 ...

  9. Spring中所使用的设计模式

    Spring是一个非常优秀的开源框架,项目源码中所使用的设计模式随处可见,这篇文章主要记录一下Spring中常见的设计模式: (1)工厂模式:Spring使用工厂模式,通过BeanFactory和Ap ...

最新文章

  1. ACMNO.48 01字串
  2. 【原创】Struts2.5.12版本中使用通配符*
  3. 移植 Python 量化交易 TA-Lib 库到函数计算
  4. PowerDesigner生成mysql字段comment 注释
  5. linux的django路径,Ubuntu下使用Django搭建前后端分离的全栈项目
  6. 光华科技光刻胶_【收藏】6天5板!21只光刻胶概念(名单)“出炉”!
  7. Java 8中的新BigInteger方法
  8. day12 java的方法覆盖(重写)
  9. C语言中二级指针的作用
  10. 通过编译php为httpd的模块实现lamp
  11. 如何借助大数据提升城市治理现代化水平
  12. Android源码分析之Builder模式
  13. 网站SEO优化之Robots.txt文件写法。
  14. 书_阿朱_好好看书[转]
  15. 201871010134-周英杰《面向对象程序设计(Java)》第四周学习总结
  16. DW1000学习之路(三)--------DW1000的中断处理问题
  17. java socket分包粘包 代码_分享java中处理socket通信过程中粘包情况的实例代码
  18. 帅某---考研---空间直线绕坐标轴旋转、二次曲面方程
  19. 车载系统升级、“特饭”会员品牌上线,解读新特背后的互联网产品逻辑...
  20. 桌面窗口管理器dwm.exe内存过高,intel核显内存泄漏问题(附核显升级链接)

热门文章

  1. 共享充电宝还在打仗,支付宝已经笑了
  2. iPhone11系列新配色售空 暗夜绿溢价超过500元
  3. 1小时搞定马化腾,却巨亏200亿!近五年最火的创业明星,正在沦为网红
  4. 华为澄清:公司副总裁未发表中美技术还差两万五千里表述
  5. shell编程追加1
  6. 微信小程序生成小程序码,如何在开发版本调试?
  7. 初入c++(六)虚函数实现多态,虚析构函数,虚函数表和多态实现机制,纯虚函数。
  8. pmp知识点详解-项目大牛整理_PMP项目管理第六章:项目进度管理(5)核心知识点...
  9. 安卓 background的图片随着textview的大小而改变_关于CSS中的背景属性background简述...
  10. 【kafka】kafka获取消费组异常 EOFException: null KeeperErrorCode