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

SSM-IOC入门案例/DI入门案例

了解:分层架构包括:表现层(Controller层),业务逻辑层(Service层),数据访问层(Dao层)

每个层只关注特定的功能:

  • 表现层:专注于用户界面和 HTTP 处理。

此处不涉及用户端,不需要controller,直接模拟APP调用Service:

import Service.BookService;
import Service.impl.BookServiceImpl;public class APP {public static void main(String[] args) {BookService bookservice=new BookServiceImpl();bookservice.save();}
}

  • Service 层:专注于业务逻辑,不关心数据存储细节。
//接口
package Service;public interface BookService {void save();}

 

//实现类
package Service.impl;import Dao.BookDao;
import Dao.impl.BookDaoImpl;
import Service.BookService;public class BookServiceImpl implements BookService {BookDao bookdao=new BookDaoImpl();public void save(){System.out.println("book service save");bookdao.save();}
}
  • DAO 层:专注于数据访问,不关心业务规则
package Dao;public interface BookDao {void save();
}

 

package Dao.impl;import Dao.BookDao;public class BookDaoImpl implements BookDao {public void save(){System.out.println("Book  Dao  Impl.save");}
}

用户请求(Web) → Controller接收请求 → Service验证业务规则(如用户名是否存在) → DAO查询数据库 → Service调用DAO保存用户 → Controller返回响应

一.IOC入门案例

(1)要进行IOC容器管理(将创建对象的权限交给SpringBoot容器管理),需要:

1.管理什么?(Service 和Dao)

2.通过配置文件,告诉容器哪些类需要管理

3.将对象交给IOC容器管理后,如何获得IoC容器? (通过接口)

4.IoC容器获得后,如何从容器中获得Bean? (接口方法,即接口的实现类)

具体实现:已经写好基础的调用Service,Dao后:

1.pom文件导入包spring,新增一个配置文件applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>beaProject</artifactId><version>1.0-SNAPSHOT</version><dependencies><!-- 修正Spring Context依赖的groupId --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.10.RELEASE</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency></dependencies><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties></project>

2.在配置文件中配置对应的bean

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--2编写配置文件:注意配置的是实现类不是接口通过id给他起别名,方便取的时候指定是哪一个BeanClass 表示给Bean定义类型--><bean id="bookDao1" class="Dao.impl.BookDaoImpl"></bean><bean id="Service1" class="Service.impl.BookServiceImpl"></bean></beans>

3.通过接口 获取IOC容器,4.通过容器获取bean 将需要调用的Bean的id作为参数传入

import Dao.BookDao;
import Service.BookService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class App2 {public static void main(String[] args) {
//        3获取容器//需要将配置文件作为参数告诉接口ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");//        4.通过容器获取bean  将需要调用的Bean的id作为参数传入BookDao bookdao=(BookDao) ctx.getBean("bookDao1");bookdao.save();BookService bookService=(BookService)ctx.getBean("Service1");//多态写法bookService.save();}
}

二.DI入门案例

问题:上面的Service层中还是通过自己创建Dao中对象的方式,没有实现完全解耦:  BookDao bookdao=new BookDaoImpl();

解决:DI注入

1.Service中需要的Dao对象如何进入到Service中  (提供方法)

2.Service和Dao间的关系如何描述?(通过配置指明)

还是在上面IoC容器的步骤上继续修改:

5.删除业务层中使用new方式创建Dao对象的代码:

6.提供Set方法,方便传入对象

package Service.impl;import Dao.BookDao;
import Service.BookService;public class BookServiceImpl implements BookService {
//    5.删除业务层中使用new方式创建Dao对象的代码
//    BookDao bookDao=new BookDaoImpl();private BookDao bookDao;public void save(){System.out.println("book service save");bookDao.save();}//6.提供Set方法,方便传入对象public void setBookDao(BookDao bookDao){ //注意:需要使用正确的驼峰命名法,才能被正确识别set要小写,其他的开头大写this.bookDao=bookDao;}
}

7.在配置中指定Service 与Dao关系 (因为是Service中调用Dao所以在Dao中配置)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--2编写配置文件:注意配置的是实现类不是接口通过id给他起别名,方便取的时候指定是哪一个BeanClass 表示给Bean定义类型--><bean id="bookDao1" class="Dao.impl.BookDaoImpl"></bean><bean id="Service1" class="Service.impl.BookServiceImpl"><!--配置Service 与Dao关系 (因为是Service中调用Dao所以在Dao中配置)--><property name="bookDao" ref="bookDao1"/> <!--注意区分:name中指定的是Service中的属性,而ref中指定的是Bean的id名--></bean></beans>

http://www.xdnf.cn/news/673111.html

相关文章:

  • OpenHarmony平台驱动使用(四),GPIO
  • 08SpringBoot高级--自动化配置
  • 3D虚拟工厂
  • leetcode每日一题(好几天之前的) -- 3068.最大节点价值之和
  • 国产化Word处理控件Spire.Doc教程:在 C# 中打印 Word 文档终极指南
  • 李沐《动手学深度学习》 | 4.5-4.6 正则化技术:权重衰退与Dropout
  • 类和对象(3)
  • openpi π₀ 项目部署运行逻辑(五)——模型微调
  • ASP.NET Core 中JWT的基本使用
  • 分布式架构:解读不同数据一致性模型
  • ⚡ Hyperlane —— 比 Rocket 更快的 Rust Web 框架!
  • 3D草图绘制管道
  • 26考研 | 王道 | 第五章 传输层
  • AI in Game,大模型能力与实时音视频技术融合,交出AI应用新答卷
  • EMQX启用单向认证的SSl/TLS连接的配置步骤
  • 如何在加密数据上实现模糊查询?技术方案全解析
  • 视觉语言多模态模型的优化
  • 调试(gdb/cgdb)
  • Python+AI Agent:解锁MCP Servers的智能潜力
  • Python学习(2) ----- Python的类型
  • 《软件工程》实战— 在线教育平台开发
  • Matlab中gcb、gcbh、gcs的区别
  • 下一代 SaaS 平台的 AI 架构重构路径——多租户 AI 服务调度 · 多角色智能辅助 · 嵌入式 AIGC 能力的融合设计
  • 学习黑客 Metasploit 主要组件之 Exploit
  • 实时同步缓存,与阶段性同步缓存——补充理解《补充》
  • 塔能科技:有哪些国内工业节能标杆案例?
  • L1-112 现代战争 - java
  • 将 ubutun 的网络模式 从NAT 改到 桥接模式后,无法上网,linux 没有IP地址 的解决方案
  • Java设计模式之代理模式详解
  • 威联通QNAP替换docker源