当前位置: 首页 > article >正文

springboot-响应接收与ioc容器控制反转、Di依赖注入

1.想将服务器中的数据返回给客户端,需要在controller类上加注解:@ResponseBody;

这个注解其实在前面已经使用过,@RestController其实就包含两个注解:
@Controller

@ResponseBody

返回值如果是实体对象/集合,将会转换为json格式响应

2.统一响应结果:

如果响应的结果格式不一致,会导致前端处理数据非常麻烦,所以我们可以使用一个result对象来存储响应信息:

3.案例:


 

package new_start.new_start4.controller;import new_start.new_start4.pojo.Emp;
import new_start.new_start4.pojo.Result;
import new_start.new_start4.utils.XmlParserUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;
@RestController
public class EmpController {@RequestMapping("/listEmp")public Result list(){String file = this.getClass().getClassLoader().getResource("emp.xml").getFile();System.out.println(file);List<Emp> empList = XmlParserUtils.parse(file, Emp.class);empList.stream().forEach(emp -> {String gender = emp.getGender();if ("1".equals(gender)) {emp.setGender("男");}else if("2".equals(gender)){emp.setGender("女");}String job = emp.getJob();if("1".equals(job)){emp.setJob("讲师");} else if ("2".equals(job)) {emp.setJob("班主任");} else if ("3".equals(job)) {emp.setJob("就业指导");}});return new Result(1, "success", empList);}}

但是我们在实际开发中往往使用三层架构:

4.

具体代码:

注意:在service层中需要有一个创建dao对象的步骤:

private EmpDao empdao = new EmpDaoImpl();

同样的在controller层中有一个创建service对象的步骤

private EmpService empService = new EmpServiceImpl();

5.即使这样分层架构,各层之间仍然有耦合性,比如我更改service实现类的名字,那么我就需要在controller层创建对象的时候改代码,这样不利于后期维护;

所以我们需要进行分层解耦,这需要用到控制反转和依赖注入;

我们首先需要将各层实现类进行注解@Component, 将其交给ioc容器,然后使用注解@autowired进行依赖注入

声明bean的时候可以用value来设定bean名,默认为类名首字母小写;

想要声明的bean生效,还需要进行扫描,使用注解@ConponentScan;

但是该注解包含在了启动类声明注解上@SpringBootApplication,扫描范围是所在包及其子包

扫描格式:@ConponentScan({"dao", "com.itheima"}) 小括号包书名号,书名号内写包名,之间用逗号隔开;

6.

@Autowired默认是根据类型进行注入的,如果有多个相同类型的bean,则可以使用@primary进行解决;

或者是@Qualifier

或者是@Resource

http://www.lryc.cn/news/2397657.html

相关文章:

  • CSP使用严格设置
  • Spring代理工厂类ProxyFactory作用以及实现原理
  • SpringBoot使用MQTT协议简述
  • 【GraphQL】深入解析 Apollo Client:从架构到实践的一站式 GraphQL 解决方案
  • 集成电路制造设备防震基座选型指南:为稳定护航-江苏泊苏系统集成有限公司
  • 华为OD机试真题——阿里巴巴找黄金宝箱(II)(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • Vue中 toRaw 和 markRaw 的使用
  • 探索DeepSeek提示词:关键策略与实用场景
  • 海底三维可视化平台
  • Elasticsearch 读写流程深度解析
  • AIoT赋能场馆数字化转型:智能管理新生态
  • 1、Pytorch介绍与安装
  • 【从零开始学习QT】Qt 概述
  • 家庭路由器改装,搭建openwrt旁路由以及手机存储服务器,实现外网节点转发、内网穿透、远程存储、接入满血DeepSeek方案
  • 人工智能工程技术专业 和 其他信息技术专业 有哪些关联性?
  • 基于本地模型+多级校验设计的高效缓存,有效节省token数量(有点鸡肋doge)。
  • 逐步检索增强推理的跨知识库路由学习
  • 用Git管理你的服务器配置文件与自动化脚本:版本控制、变更追溯、团队协作与安全回滚的运维之道
  • 【数据库】关系数据库标准语言-SQL(金仓)下
  • Vue3+SpringBoot全栈开发:从零实现增删改查与分页功能
  • 小黑大语言模型应用探索:langchain智能体构造源码demo搭建1(初步流程)
  • 极客时间:用 FAISS、LangChain 和 Google Colab 模拟 LLM 的短期与长期记忆
  • leetcode hot100刷题日记——35.子集
  • MybatisPlus(含自定义SQL、@RequiredArgsConstructor、静态工具类Db)
  • React 组件异常捕获机制详解
  • 手眼标定:九点标定、十二点标定、OpenCV 手眼标定
  • [总结]前端性能指标分析、性能监控与分析、Lighthouse性能评分分析
  • React-native的新架构
  • 【Android】MT6835 + MT6631 WiFi进入Meta模式出现WiFi_HQA_OpenAdapter failed
  • Git 全平台安装指南:从 Linux 到 Windows 的详细教程