模拟三层--控制层、业务层和数据访问层

news/2024/9/23 20:30:21/

三层的概念:https://developer.aliyun.com/article/1390024

一、新建一个项目

        我新建好的项目名为spring__ioc_02,然后在 src-main-java 下建立三层(数据访问层、业务层和控制层)的包 dao、service 和controller、并在包下建立相应的接口和实现类

        Project 只能一次有一个,我们想要让所有的项目出现在一列,就需要在现有 Project 基础上 New-Module

然后 next

        Parent 改为 <None>;删掉我们依赖建立的目录 \Demo001\,若不删,新项目就会建立在 \Demo001\ 下,称为项目 Demo001 的子项目

然后 finish 即创建成功

(一)创建三层(控制层、业务层和数据访问层)对应的包,包下建立相应的接口和实现类

1、控制层

紫色为包名、绿色为接口名

java">package com.apesource.controller;public interface IUserController {//定义方法public void save();
}

创建实现类

java">package com.apesource.controller;
//UserControllerImp 实现 IUserController 接口并重写方法
public class UserControllerImp implements IUserController{@Overridepublic void save() {System.out.println("==========Controller层的新增方法=========");}
}

2、业务层

把 .controller 删掉写成 .service,就成功建立与 Controller 同级的包 service

同 Controller 步骤创建接口和实现类

java">package com.apesource.service;public interface IUserService {public void save();
}
java">package com.apesource.service;public class UserServiceImp implements IUserService{@Overridepublic void save() {System.out.println("===========service层的新增方法===========");}
}
java">package com.apesource.dao;import java.sql.SQLOutput;
import java.util.SortedMap;public interface IUserDao {public void save();
}
java">package com.apesource.dao;public class UserDaoImp implements IUserDao{@Overridepublic void save() {System.out.println("==========dao层的新增方法=========");}
}

三层准备完毕、写测试类

(二)测试类

建一个与 Conterller 包同级的包 test,test里面建立一个 Test01 测试类

测试类不要忘了main 方法

1、高耦合方式

java">package com.apesource.test;import com.apesource.controller.IUserController;
import com.apesource.controller.UserControllerImp;import java.sql.SQLOutput;public class Test01 {public static void main(String[] args) {IUserController controller=new UserControllerImp();controller.save();}
}

当然,dao 层为数据访问层、然后 service 层调用数据访问层,controller 层调用 service 层,所以目前的测试类执行有误,我们还需要对 service 层和controller 层做一定的处理,new 相应对象(高耦合)

java">package com.apesource.service;import com.apesource.dao.IUserDao;
import com.apesource.dao.UserDaoImp;public class UserServiceImp implements IUserService{IUserDao dao=new UserDaoImp();@Overridepublic void save() {System.out.println("===========service层的新增方法===========");dao.save();}
}
java">package com.apesource.controller;import com.apesource.service.IUserService;
import com.apesource.service.UserServiceImp;public class UserControllerImp implements IUserController{IUserService service = new UserServiceImp();@Overridepublic void save() {System.out.println("==========Controller层的新增方法=========");service.save();}
}

测试结果(运行成功):

2、低耦合方式

我们要实现解耦,先将 业务层和数据访问层的实现类的路径 拿出来放在 properties 文件中

java">dao=com.apesource.dao.UserDaoImp
service=com.apesource.service.UserServiceImp

建一个与 Conterller 包同级的包 util,util 里面建立一个 BeansFactory 工厂类,通过这个类实现解耦

java">package com.apesource.util;import com.apesource.test.Test01;import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;public class BeansFactory {//按照用户需求以解耦的方式创建对象public static Object getBean(String key){try {//1.创建工具类Properties properties = new Properties();//2.加载文件InputStream inputStream = Test01.class.getClassLoader().getResourceAsStream("beans.properties");properties.load(inputStream);//3.通过key获取valueString classPath = properties.getProperty(key);return Class.forName(classPath).newInstance();} catch (IOException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (ClassNotFoundException exception) {exception.printStackTrace();}return null;}}
java">package com.apesource.test;import com.apesource.controller.IUserController;
import com.apesource.controller.UserControllerImp;import java.sql.SQLOutput;public class Test01 {public static void main(String[] args) {IUserController controller=new UserControllerImp();controller.save();}
}

当然,dao 层为数据访问层、然后 service 层调用数据访问层,controller 层调用 service 层,所以目前的测试类执行有误,我们还需要对 service 层和controller 层做一定的处理

java">package com.apesource.service;import com.apesource.dao.IUserDao;
import com.apesource.dao.UserDaoImp;public class UserServiceImp implements IUserService{IUserDao dao= (IUserDao) BeansFactory.getBean("dao");@Overridepublic void save() {System.out.println("===========service层的新增方法===========");dao.save();}
}
java">package com.apesource.controller;import com.apesource.service.IUserService;
import com.apesource.service.UserServiceImp;public class UserControllerImp implements IUserController{IUserService service = (IUserService) BeansFactory.getBean("service");@Overridepublic void save() {System.out.println("==========Controller层的新增方法=========");service.save();}
}

测试结果(运行成功):


http://www.ppmy.cn/news/1508910.html

相关文章

如何构建高效且实用的编程学习笔记系统

目录 一、明确目标二、选择合适的工具示例&#xff1a;使用Notion构建笔记系统 三、记录技巧1. 精简原则2. 结构化思维3. 多媒体辅助4. 实践为主 四、复习与更新1. 定期复习2. 动态更新3. 分享交流 五、总结 在编程学习的道路上&#xff0c;每一位开发者都会遇到各种各样的挑战…

CPU缓存一致性机制详解

CPU缓存一致性机制详解 在多核处理器中&#xff0c;缓存一致性是保证系统正常运行的重要环节。本文详细介绍了缓存一致性协议、写入策略、总线嗅探、目录协议等相关概念&#xff0c;并通过示例代码解释了这些机制是如何在实际应用中工作的。通过学习本文&#xff0c;读者可以深…

老阳推荐的temu选品师项目能不能做成?

在不断变化的电商领域&#xff0c;temU选品师项目作为一种新兴职业&#xff0c;受到了越来越多的关注。老阳的推荐使得这一项目引起了不少人的兴趣&#xff0c;那么&#xff0c;temU选品师项目究竟能否成功呢?让我们从一个新的角度来探讨这一问题。 新兴市场的机遇与挑战 temU…

在IIS上部署ASP.NET Core Web API和Blazor Wasm应用程序的完整指南

摘要 本文将引导你通过在IIS上部署ASP.NET Core Web API和Blazor WebAssembly应用程序的步骤。从环境准备到部署完成&#xff0c;我们将覆盖所有关键点。 1. 环境准备 安装IIS安装.NET Core Hosting Bundle创建ASP.NET Core Web API项目创建Blazor WebAssembly项目 2. 开发…

cms里文章页自定义文件名去掉html方法

一、cms里文章页自定义文件名去掉html方法&#xff0c;文章命名规则即便去掉html&#xff0c;在自定义文件名里生成的时候调取本页面链接依然会带html&#xff0c;用已下代码替换掉.html <link rel"canonical" href"{dede:global.cfg_basehost/}{dede:field…

Transformer架构;Encoder-Decoder;Padding Mask;Sequence Mask;

目录 Transformer架构 Transformer架构的主要组成部分: 简单举例说明输入和输出: Encoder-Decoder 编码器/解码器组成 6、位置前馈网络(Position-wise Feed-Forward Networks) 7、残差连接和层归一化 10、掩码Mask 10.1 Padding Mask 10.2 Sequence Mask 为什么…

【初阶数据结构题目】26. TOP-K问题

TOP-K问题 TOP-K问题&#xff1a;即求数据结合中前K个最大的元素或者最小的元素&#xff0c;一般情况下数据量都比较大。 比如&#xff1a;专业前10名、世界500强、富豪榜、游戏中前100的活跃玩家等。 比如&#xff1a; 要存储4GB的内存数据&#xff0c;现在只有1GB&#xff…

µC/OS-III

第一章 μCOS 简介 1.1 初识 μCOS 实际上&#xff0c;一个 CPU 核心在某一时刻只能运行一个任务&#xff0c;由于切换处理任务的速度非常快&#xff0c;因此给人造成了一种同一时刻有多个任务同时运行的错觉。 操作系统的分类方式可以由任务调度器的工作方式决定&am…