JavaWeb_Web后端_分层解耦

这篇具有很好参考价值的文章主要介绍了JavaWeb_Web后端_分层解耦。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

三层架构

  • controller: 控制层, 接收前端发送的请求, 对请求进行处理, 并响应数据.
  • service: 业务逻辑层, 处理具体的业务逻辑.
  • dao: 数据访问层(Data Access Object)(持久层), 负责数据访问操作, 包括数据的增, 删, 改, 查.

Dao

接口:

public interface EmpDao {
    // 获取员工列表数据
    public List<Emp> listEmp();
}

实现:

public class EmpDaoA implements EmpDao {
    @Override
    public List<Emp> listEmp() {
        // 1. 加载emp.xml并解析emp.xml中的数据
        String file = this.getClass().getClassLoader().getResource("emp.xml").getFile();
        List<Emp> emplist = XmlParserUtils.parse(file, Emp.class);
        return emplist;
    }
}

Service

接口:

public interface EmpService {
    // 获取员工列表数据
    public List<Emp> listEmp();
}

实现:

public class EmpServiceA implements EmpService {

    public EmpDao empDao = new EmpDaoA();

    @Override
    public List<Emp> listEmp() {
        // 1. 调用dao, 获取数据
        List<Emp> emplist = empDao.listEmp();
        // 2. 对员工信息中的gender, job字段进行处理
        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 emplist;
    }
}

Controller

@RestController
public class EmpController {

    private EmpService empService = new EmpServiceA();

    @RequestMapping("/listEmp")
    public Result list()
    {
        // 1. 调用service, 获取数据
        List<Emp> emplist = empService.listEmp();

        // 2. 组装数据并返回
        return Result.success(emplist);
    }
}

分层解耦

概述

  • 内聚: 软件中各个功能模块内部的功能联系.
  • 耦合: 衡量软件中各个层/模块之间的依赖、关联的程度.
  • 软件设计原则: 高内聚低合.

IOC&DI

  • 控制反转:Inversion Of Control,简称IOC。对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转。
  • 依赖注入:Dependency Injection,简称DI。容器为应用程序提供运行时,所依赖的资源,称之为依赖注入。
  • Bean对象:IOC容器中创建、管理的对象,称之为bean。

入门

  1. 控制反转: Service层 及 Dao层的实现类, 交给IOC容器管理.
@Component // 将当前类交给IOC容器管理, 成为IOC容器中的bean
public class EmpServiceA implements EmpService{}
@Component
public class EmpDaoA implements EmpDao {}
  1. 依赖注入: 为Controller及Service注入运行时依赖的对象.
@Autowired // 运行时, IOC容器会提供该类型的bean对象, 并赋值给该变量
private EmpService empService;
@Autowired
public EmpDao empDao;

IOC详解

Bean的声明

要把某个对象交给IOC容器管理, 需要在对应的类上加上如下注解之一.

注解 说明 位置
@Component 声明bean的基础注解 不属于以下三类时, 用此注解
@Controller @Component的衍生注解 标注在控制器类上
@Service @Component的衍生注解 标注在业务类上
@Repository @Component的衍生注解 标注在数据访问类上(由于与mybatis整合, 用的少)
注意事项:
  1. 声明bean的时候,可以通过value属性指定bean的名字,如果没有指定,默认为类名首字母小写。
@Component("name")
  1. 使用以上四个注解都可以声明bean,但是在springboot集成web开发中,声明控制器bean只能用@Controller。
Bean的组件扫描
  1. 前面声明bean的四大注解,要想生效,还需要被组件扫描注解@ComponentScan扫描。
  2. @ComponentScan注解虽然没有显式配置,但是实际上已经包含在了启动类声明注解 @SpringBootApplication中,默认扫描的范围是启动类所在包及其子包。
@ComponentScan({"com.itheima", "Test"}) // 配置扫描范围

DI详解

Bean注入
  1. @Autowired注解(Spring框架提供): 默认按照类型进行, 如果存在多个相同类型的bean, 将会报错.
  2. @Primary(Spring框架提供): 多个相同类型的bean中, 添加@Primary注解的bean生效.
  3. @Qualifier(Spring框架提供):
@Autowired
// 指定注入的bean
@Qualifier("empServiceA")
private EmpService empService;
  1. @Resource(JDK提供):
// 通过名称注入
@Resource(name = "empServiceA")
private EmpService empService;

来源

黑马程序员. JavaWeb开发教程文章来源地址https://www.toymoban.com/news/detail-438589.html

到了这里,关于JavaWeb_Web后端_分层解耦的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JavaWeb_Web前端_Element组件库

    在当前工程的目录下, 打开命令行执行如下指令: npm install element-ui@2.15.3 在main.js中添加如下代码: 添加组件 在views目录下创建element目录, 并在element目录下创建ElementView.vue, 代码如下所示: 导入到根组件 在App.vue的template的div中输入如下代码: 自动生成代码如下: EmpView.vue 打包按钮

    2024年02月03日
    浏览(26)
  • JavaWeb:vue、AJax、ELement、maven、SpringBoot、、Http、Tomcat、请求响应、分层解耦

    VUE是前端框架,基于MVVM,实现数据双向绑定 框架是半基础软件,可重用的代码模型  Vue-cli 是Vue官方提供的一个脚手架,用于快速生成一个 Vue 的项目模板 1 统一的目录结构 2 本地调试 3 热部署:代码变动,不需要重新运行,就可以加载最新的程序 4 单元测试 5 集成打包

    2024年04月14日
    浏览(39)
  • JavaWeb和MVC三层架构

    网站发布和部署一定要依托技术语言吗: 不一定,一个网站可以直接发布和部署,因为因为浏览器能够识别网页只需要两样东西,网络和静态页面,还有一个装在他们的容器,比如 nginx。 静态页面面临的问题: 1:静态网页是固定的,是不可变的。如果一个网站比如腾讯首页

    2024年02月14日
    浏览(32)
  • SpringBoot(入门)三层架构Controller、Service、Dao

    SpringB是一个基于Java的开源框架,用于创建微服务。它由Pivotal Team开发,用于构建独立的生产就绪Spring应用。 SpringBoot 的设计是为了让你尽可能快的跑起来 Spring 应用程序并且尽可能减少你的配置文件,简化开发。 Controller层:(顾名思义 控制层)控制并处理http请求,将其不

    2024年02月07日
    浏览(31)
  • JavaWeb学习|JavaBean;MVC三层架构;Filter;Listener

    实体类 JavaBean有特定的写法: 必须要有一个无参构造 属性必须私有化。 必须有对应的get/set方法 用来和数据库的字段做映射 ORM; ORM:对象关系映射 表---类 字段--属性 行记录----对象   Filter:过滤器,用来过滤网站的数据 处理中文乱码 登录验证.... 弄一个过滤器的demo 空maven+web项

    2024年02月13日
    浏览(30)
  • <Spring Boot>开发基于三层架构设计:Dao层、Service层、Controller层及案例一

    三层架构设计:基于Spring Boot开发要使用三层架构: 数据访问层(Dao)、业务逻辑层(Service)、控制层(Control-ler) (1)数据访问层(Dao):Dao层是最底层的设计,用户操作数据库。通过MyBatis持久化实现接口开发,XML文件。Dao层的设计步骤:1、在数据库中生成数据库表 2通

    2024年02月15日
    浏览(33)
  • Java后端开发:SpringBoot项目中的三层架构与代码角色

    目前,大部分后端项目主要目的是暴露功能接口(API)到网络上,由前端程序访问这些接口并获取数据,然后展示在界面上,它们之间遵从Restful规约;还有一部分项目暴露方法,让前端代码实现远程调用,采用的是RPC的思想。 但是无论如何,后端程序存在的意义就是交换、

    2024年02月06日
    浏览(34)
  • JavaWeb开发(后端Web开发【一】)

    此文档来源于网络,如有侵权,请联系删除! 什么是Maven Maven是apache旗下的一个开源项目,是一款用于管理和构建java项目的工具。 Apache Apache 软件基金会,成立于1999年7月,是目前世界上最大的最受欢迎的开源软件基金会,也是一个专门为支持开源项目而生的非盈利性组织。

    2024年02月15日
    浏览(40)
  • 分层解耦、IOC和DI

    学习教程:【黑马程序员2023新版JavaWeb开发教程,实现javaweb企业开发全流程(涵盖Spring+MyBatis+SpringMVC+SpringBoot等)】 https://www.bilibili.com/video/BV1m84y1w7Tb/?p=161share_source=copy_webvd_source=2c07d62293f5003c919b2df9b2e0549e 在进行软件设计和软件开发时,需要让每个接口、类或方法的职责更加单

    2024年02月14日
    浏览(35)
  • [JavaWeb]【七】web后端开发-MYSQL

    目录 一 数据库介绍 1.1 什么是数据库  1.2 数据库产品 二 MySQL概述 2.1 下载 2.2 解压 2.3 配置 2.3.1. 添加环境变量 2.3.2. 初始化MySQL 2.3.3. 注册MySQL服务 2.3.4. 启动MySQL服务  2.3.5. 修改默认账户密码 2.4 登录MySQL 2.5卸载MySQL 2.2 数据模型 2.3 SQL简介 三 数据库设计-DDL 3.1 数据库操作 3

    2024年02月12日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包