当前位置: 首页 > 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>

相关文章:

  • P4155 [SCOI2015] 国旗计划
  • 第二批考更有利?软考高项两个批次考试难度对比分析!
  • Oracle EBS 12.1 处理ISG 发布的wsdl 被请求时遇到500错误
  • K3s 中,CoreDNS 无法启动并报错 Listen: listen tcp :53: bind: permission denied
  • 机器学习中的关键术语及其含义
  • 永磁同步电机控制算法--基于电磁转矩反馈补偿的新型IP调节器
  • 鸿蒙OSUniApp 实现的数据可视化图表组件#三方框架 #Uniapp
  • IPsec协议
  • vue 实现table上下拖拽行功能
  • PyTorch 中mm和bmm函数的使用详解
  • 利用机器学习优化数据中心能效
  • Go 应用中的 Redis 连接与操作
  • chrome浏览器地址栏输入查询无效
  • c#,vb.net使用OleDb写入Excel异常:字段太小而不能接受所要添加的数据的数量
  • 【无标题】C++单例模式详解
  • CentOS 7 下 Redis 从 5.0 升级至 7.4.3 全流程实践
  • 人工智能模型方面有哪些优化措施,可以提升模型的准确率
  • 嵌入式开发--STM32G431无法正常运行程序,BOOT0与CAN冲突
  • 第五十五节:综合项目实践-实时人脸美化滤镜
  • (独家)SAP WIP生产订单结算报错:没有估算额;不可能结算
  • 手机网站信任从哪里设置/如何解决网站只收录首页的一些办法
  • 虹口专业做网站/手机怎么搭建属于自己的网站
  • 一个简单的网站怎么做/产品推广策划方案
  • 怎么做品牌推广网站/线上宣传方式
  • 南京网站建设与网络营销的关系/seo技术培训价格表
  • 自己做的网站怎么挣钱/欧美seo查询