web007-三层架构 1.课程复现解决图片无法加载问题直接将图片放进 source 的 image 文件夹里重新设置图片路径。2.理解三层架构严格的 Controller → Service → DAO 三层每层都有 接口 两套实现A 和 B用来对比手动 new和Spring IOC 依赖注入的区别一、三层架构是什么三层架构把应用分成三个职责清晰的层层职责fifth 中的体现Controller表现层接收 HTTP 请求、参数校验、调用 Service、返回响应EmpControllerService业务逻辑层处理业务规则如 gender 1→男, job 1→讲师EmpServiceA / EmpServiceBDAO数据访问层只负责数据的存取读 XML、查数据库EmpDaoA / EmpDaoB为什么要分三层对比 fourth 的痛点如果想把 XML 数据源换成 MySQL 数据库fourth 需要改动整个 Controller如果你想把 gender 的转换规则从 “1→男” 改成 “1→男性”也要在 Controller 里翻找fifth 的分层好处DAO 层只负责取数据换数据源时只改 DAO 实现Service 层只负责业务规则规则变了只改 ServiceController 层只负责接收/响应请求不关心数据怎么来的、业务怎么处理的这就是单一职责原则每个类只干一件事。二、耦合是什么耦合 类与类之间的依赖紧密度。fifth 中 A 系列的强耦合// EmpController.javapublicclassEmpController{publicResultlist(){EmpServiceAempServiceAnewEmpServiceA();// 硬编码依赖 EmpServiceAListEmplistempServiceA.listEmp();returnResult.success(list);}}// EmpServiceA.javapublicclassEmpServiceAimplementsEmpService{privateEmpDaoAempDaoAnewEmpDaoA();// 硬编码依赖 EmpDaoA// ...}问题如果你想换一个 DAO 实现比如 EmpDaoB你必须修改 EmpServiceA 的源代码。这就是强耦合——牵一发而动全身。三、IOC控制反转和 DI依赖注入问题的本质传统方式A 系列类自己控制依赖的创建IOC 方式B 系列控制权反转给 Spring 容器IOC 控制反转控制权从程序员手动 new反转给了Spring 容器。DI 依赖注入DI 是 IOC 的具体实现方式。Spring 容器在运行时会自动把依赖对象注入到需要它的地方。// EmpBController.java — B 系列RestControllerpublicclassEmpBController{AutowiredprivateEmpServiceempService;// 只声明接口不关心具体实现// Spring 会自动注入 EmpServiceB 实例}// EmpServiceB.javaComponentpublicclassEmpServiceBimplementsEmpService{AutowiredprivateEmpDaoempDao;// 只声明接口Spring 自动注入 EmpDaoB}// EmpDaoB.javaComponentpublicclassEmpDaoBimplementsEmpDao{// Spring 管理的 Bean}关键注解说明注解作用位置Component告诉 Spring“请把这个类创建为 Bean放入容器管理”DAO、Service 实现类Autowired告诉 Spring“请把容器里匹配的 Bean 注入到这个字段”Controller、ServiceSpring 容器启动时扫描到 Component → 创建 EmpDaoB 实例 → 放入容器扫描到 Component → 创建 EmpServiceB 实例→ 发现 Autowired EmpDao → 从容器中取出 EmpDaoB → 注入扫描到 RestController → 创建 EmpBController 实例→ 发现 Autowired EmpService → 从容器中取出 EmpServiceB → 注入请求 /listEmp1 时前端 → EmpBController.empService (已是注入好的 EmpServiceB)→ EmpServiceB.empDao (已是注入好的 EmpDaoB)→ 读取 XML → 返回数据四、为什么要这么做解耦 — 代码更容易修改想换 DAO 实现只需要写一个新的 Component EmpDaoC不改任何现有代码Spring 自动切换。3.通过三层架构重新设计信管资料库网站结构目录前端后端前后端首页和部分界面未特别区别只是后端增加了用户管理等功能目前还在研究将自己的文件录入该系统。还在优化中本网站由Tencent 云aicopilot文心快码等ai协作。