我们习惯这样编写代码:

在service层写接口,然后用实现类去实现接口,并且将实现类注入到容器中

@Service
public class AccountServiceImpl implements AccountService {}

在controller层却是用接口操作service的bean的方法,

@Autowired
private AccountService userService;

为神魔这样?

理解:

1)注入的就是实现类,只不过拿接口来接收,接受的类型为接口,面向接口编程,那么为何要面向接口编程?这就涉及到使用接口做代理,因为通过@autowired的对象是通过接口的方式会使用jdk动态代理,jdk动态代理只能对实现接口的类生成代理,而不能针对类。

2)注入的是实现类对象,接收的是接口;理解为多态;

如果一个service接口有多个实现类呢?

controller类中使用@resource并通过byname的方式注入,不要用@autowired这种通过类型的方式了,

Service层(此时有两个接口实现类)

  @Service("PCIImpt1")class PCIImpt1 imeplements PCI{}@Service("PCIimpt2")class PCIImpt2 imeplements PCI{}

Controller层

@Resource(name="PCIimpt2") //填PCIimpt1,注入PCIimpt1实现类,填PCIimpt2,则注入PCIimpt2实现类
private PCI pci;   //注入接口以Resource手动指定接收

@Service注解是放实现类上的而非接口上

今天用springboot写多模块项目,写完第一个Controller类,注入的Service接口是ok的,然后写第二个Controller类就一直报错。这把我给搞懵逼了,为什么我第一个Controller没错,第二个错了,我代码都一样的啊。

我看他说没扫描到,就去看了下@Service注解,有啊。然后我再去看包名,也对的啊。多模块下面每个模块的包名都一样的,能够被@SpringBootApplication扫描到啊,彻底蒙圈了。

看来看去我都没找到哪里错了,好吧,1个半小时过去了,我自己找不到,去百度去问人。这是越来越蒙圈(百度要不是说包名要一样,要不就是说@SpirngBootApplication扫描同级及下层所有子包,我都知道啊,概念清楚,也没错,包名我又再对了一遍。然后再就是手动扫描,自己额外写注解,无论是@ComponentScan和@SpirngBootApplication(“xx”)我都试了,中间倒是掌握了个小知识——手动用注解扫描的话,记得还要手动把@SpringBootApplication注解所在的类的所在包一起扫进去)。

3个小时了,我彻底放弃了。准备重来一次,重新上git拉了个模板,把自己的代码文件一个一个拉过去,(以前出现过一次两个项目代码完全一样的,就是一个对了,一个出问题,现在怀疑是当时导入的maven依赖有冲突,一个运气好莫名其妙对了,一个运气差)拉着拉着我就 发现刚才好像有个文件没有@Service啊,额。再一看,好吧,还真没有,把@Service写到接口上去了,Impl实现类上没有@Service,额。无语,只能恨自己眼瞎,看包名看了一遍又一遍就是没看@Serivce到底放在什么位置。

总结一下:老老实实跟着IDEA的报错去找,这要是老老实实从service类开始开,细心一点,三个小时就不会浪费了。(也是自己技能没掌握扎实,我估计是当时犯浑,没搞清@Service放接口和放实现类上的差距)

过了1个多星期了,这几天复习了spring,spring可以管理部分工具类,但是不可以管理接口,也就是@Controller,@Component,@Repository,@Service不能放接口上。

springboot中service层注入的是实现类,但Controller层接收的是接口相关推荐

  1. SpringBoot中静态变量注入方案,一网打尽

    前言 同事来找我,说自己想使用@Value注解来注入值,但是发现注入不进去,想让我帮忙看看.研究了一番,最后发现是@Value注解无法注入静态变量.下面我们一起来回顾一下本次的bug. 普通变量 首先 ...

  2. springboot中service中注入dao失败测试类中注入成功_聊一聊 Java 服务端中的乱象

    查尔斯·狄更斯在<双城记>中写道:"这是一个最好的时代,也是一个最坏的时代." 移动互联网的快速发展,出现了许多新机遇,很多创业者伺机而动:随着行业竞争加剧,互联网红利 ...

  3. SpringBoot中Service层事务控制

    SpringBoot中使用事务比较简单,在Application启动类上添加@EnableTransactionManagement注解,然后在service层的方法上添加@Transactional ...

  4. OA系统十八:请假申请四:【请假申请】这个内嵌界面中【提交请假表单数据】的Controller层;

    本篇博客的主要内容是: 本篇博客需要注意的点: (1)一种策略,或称之为一种思想:一个Controller的url设置成通配符的形式,从而实现不同的请求调用不同方法: (2)加深感受下Session这 ...

  5. 在springboot中使用mybatis generate自动生成实体类和mapper

    1.在全局的pom中引入mybatis generate的依赖 <!--自动生成实体--><dependency><groupId>org.mybatis.gene ...

  6. SpringBoot中service注入失败(A component required a bean of type ‘XXService‘ that could not found)...

    先写了JUnit,发现启动不了,注释掉有问题的service也不可以.可能是因为spring开始时会加载所有service吧. 按照网友们的说法,一般需要检查: 1.入口类有没有写MapperScan ...

  7. SpringBoot中service注入失败 出现A component required a bean of type 'com.czxy.changgou3.mapper.OrderGoodsMa

    错误信息 Error starting ApplicationContext. To display the conditions report re-run your application wit ...

  8. Springboot中手动new的对象无法注入交给Spring容器管理的原因及解决办法

    Springboot中Bean的注入 我们都知道,Springboot可以使用方法级别注解(@Bean)和类级别注解(@Controller.@Component.@Service等)加包扫描的方式注 ...

  9. SSM框架中Dao层,Mapper层,controller层,service层,model层,entity层都有什么作用

    SSM是sping+springMVC+mybatis集成的框架. MVC即model view controller. model层=entity层.存放我们的实体类,与数据库中的属性值基本保持一致 ...

最新文章

  1. 使用 IntraWeb (8) - 系统模板
  2. 机器学习经典必读书,李航《统计学习方法》出视频课了!
  3. Request_继承体系
  4. Hadoop之Join、计数器、数据清洗概述
  5. 【优化SQL Server循环更新、插入耗时长的问题】
  6. linux-shell面试题
  7. CCF NOI1031 等腰三角形
  8. elementui 做删除,分页页码不正确
  9. photoshop之小技巧
  10. 为什么说多用组合,少用继承?
  11. lua unpack php,Lua 可变参数 和 table.unpack() 函数
  12. blender建模常用建模快捷键
  13. IE浏览器版本测试方法
  14. 最新版HBuilderx + 夜神模拟器 模拟器调试设置
  15. 深入剖析Auto Layout,分析iOS各版本新增特性
  16. HTML常用标签 选择器
  17. 中国医科大学2021年12月《护理中的人际沟通学》作业考核试题
  18. 如何制作html电子杂志,使用iebook怎么制作电子杂志?iebook制作电子杂志图文教程...
  19. Vue中使用使用内联样式
  20. c语言中开yroot的函数,C语言中sqrt是什么意思

热门文章

  1. easyexcel 设置标题_使用easyexcel完成复杂表头及标题的导出功能(自定义样式)
  2. [转载] python类运算符的重载
  3. Java日历compareTo()方法与示例
  4. python调用菜单响应事件_Python处理菜单消息操作示例【基于win32ui模块】
  5. oracle 静态监听 端口,侦听动态注册静态注册local_listener参数端口PORT
  6. python 网格_Python | 网格到情节
  7. css复选框样式_使用CSS样式复选框
  8. mcq 队列_MCQ | 基础知识 免费和开源软件| 套装3
  9. 自由职业的前半年,我是如何度过的?
  10. InnoDB的内存结构和特性