基于Spring Boot的外卖点餐系统设计与实现

news2024/11/25 15:26:19

基于Spring Boot的外卖点餐系统设计与实现

  • 开发语言:Java
  • 框架:springboot
  • JDK版本:JDK1.8
  • 数据库工具:Navicat11
  • 开发软件:eclipse/myeclipse/idea

系统部分展示

网站首页界面图,通过进入网站可以查看首页、商家、菜品、登录、后台管理等功能模块;通过点击登录可以填写账号、密码等详细信息,进行登录操作。

在这里插入图片描述
管理员登录界面,管理员通过后台登录窗口进行输入自己的账号信息、密码等信息,进行登录。

在这里插入图片描述
骑手功能界面,骑手通过点击后台管理,进入页面可以进行首页、个人中心、订单管理、配送单管理、商品评价管理等功能模块,进行相对应操作。

在这里插入图片描述
菜品详情界面图,用户通过点击菜品详情进入页面,可以填写名称、类型、口味、价格等信息,进行提交操作。

在这里插入图片描述
配送单管理界面,商家通过列表可以获取名称、图片、购买数量、商家编号等信息,进行查看配送单管理等信息操作。

在这里插入图片描述
订单管理界面图,通过列表可以获取名称、类型、图片、价格等信息,进行查看、详情、修改或删除操作。

在这里插入图片描述
菜品管理界面图,通过列表可以获取名称、类型、图片、口味、价格等信息,进行查看、详情、修改或删除操作。

在这里插入图片描述
菜品分类管理界面图,管理员通过菜品分类管理可以在线查看类型等信息,进行查看或添加修改或删除。

在这里插入图片描述
商家管理界面,管理员通过商家管理可以在线查看商家编号、密码、商家名称、图片等信息,进行查看或修改、删除操作。

在这里插入图片描述
用户管理界面,管理员通过用户管理可以在线查看账号、密码、姓名、性别、头像等信息,进行详情或修改、删除操作。

在这里插入图片描述

系统功能结构图

在这里插入图片描述

文档部分展示

在这里插入图片描述

摘要

随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势社会的发展和科学技术的进步,互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大人民群众的喜爱,也逐渐进入了每个用户的使用。互联网具有便利性,速度快,效率高,成本低等优点。 因此,构建符合自己要求的操作系统是非常有意义的。

本文从用户的功能要求出发,建立了外卖点餐系统 ,系统中的功能模块主要是实现管理员;首页、个人中心、用户管理、商家管理、菜品分类管理、骑手管理、系统管理、菜品管理、订单管理、配送单管理、商品评价管理,商家;首页、个人中心、菜品管理、订单管理、配送单管理、商品评价管理、我的收藏管理,用户;首页、个人中心、订单管理、配送单管理、商品评价管理、我的收藏管理、骑手;首页、个人中心、订单管理、配送单管理、商品评价管理等功能部分;经过认真细致的研究,精心准备和规划,最后测试成功,系统可以正常使用。分析功能调整与外卖点餐系统实现的实际需求相结合,讨论了JSP开发外卖点餐系统的使用。

研究意义

提升餐饮行业信息化水平:通过开发基于Spring Boot的外卖点餐系统,可以有效提升餐饮行业的信息化水平。Spring Boot框架简化了应用程序的开发、测试和部署流程,使得餐饮企业能够更快速地构建出稳定、高效的外卖点餐系统,进而提升服务质量和效率。

优化用户体验:外卖点餐系统能够为用户提供便捷、高效的点餐服务。用户可以通过系统浏览菜品、下单、支付并查看订单状态,避免了传统点餐方式中的排队等待和繁琐的支付流程。同时,系统还可以根据用户的喜好和历史订单推荐菜品,提升用户体验。

促进餐饮企业创新发展:外卖点餐系统不仅是一个点餐工具,更是餐饮企业创新发展的重要支撑。通过系统收集的用户数据,企业可以分析用户行为、消费习惯等信息,为产品创新和营销策略制定提供数据支持。

推动技术融合与应用:基于Spring Boot的外卖点餐系统涉及前端技术、后端技术、数据库技术等多个领域的技术融合与应用。系统的开发不仅提升了软件开发技术的应用水平,也为其他类似系统的开发提供了有益的参考和借鉴。

培养软件工程人才:外卖点餐系统的开发是一个综合性的软件工程项目,涉及需求分析、系统设计、编码实现、测试部署等多个环节。通过参与该项目的开发,可以培养学生的实践能力、团队协作能力和解决问题的能力,为软件工程领域培养更多优秀人才。

社会价值与经济效益:外卖点餐系统的普及和应用,不仅方便了消费者的日常生活,也促进了餐饮行业的数字化转型和升级。同时,系统的开发和应用也为社会创造了就业机会和经济效益,具有重要的社会价值。

研究目的

实现高效稳定的点餐服务:通过Spring Boot框架的使用,实现一个功能完善、性能稳定的外卖点餐系统。系统应能够处理大量的并发请求,保证用户在使用过程中的流畅体验。

提升系统的可扩展性和可维护性:在设计外卖点餐系统时,应注重系统的可扩展性和可维护性。通过合理的架构设计和模块划分,使得系统能够方便地添加新功能或修改现有功能,同时降低系统的维护成本。

保障用户数据的安全与隐私:在开发过程中,应充分考虑用户数据的安全性和隐私保护。通过采用加密技术、访问控制等手段,确保用户数据在传输和存储过程中的安全性,防止数据泄露和滥用。

优化系统性能与响应速度:通过合理的数据库设计、缓存策略以及优化算法等手段,提升外卖点餐系统的性能和响应速度。确保用户在使用系统时能够得到快速、准确的服务响应。

实现个性化推荐与营销策略:基于用户的点餐历史和偏好信息,实现个性化菜品推荐功能。同时,通过数据分析挖掘用户行为模式,为餐饮企业制定精准的营销策略提供支持。

探索新技术在点餐系统中的应用:在开发过程中,积极探索新技术在外卖点餐系统中的应用。例如,利用人工智能技术进行智能客服、语音点餐等功能的开发;利用大数据技术进行用户行为分析和精准营销等。通过新技术的应用,不断提升系统的智能化水平和用户体验。

代码部分

package com.controller;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;

import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;

import com.entity.ShangjiaEntity;
import com.entity.view.ShangjiaView;

import com.service.ShangjiaService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MPUtil;
import com.utils.CommonUtil;


/**
 * 商家
 * 后端接口
 * @author 
 * @email 
 * @date 2020-09-23 18:00:25
 */
@RestController
@RequestMapping("/shangjia")
public class ShangjiaController {
    @Autowired
    private ShangjiaService shangjiaService;
    
	@Autowired
	private TokenService tokenService;
	
	/**
	 * 登录
	 */
	@IgnoreAuth
	@RequestMapping(value = "/login")
	public R login(String username, String password, String captcha, HttpServletRequest request) {
		ShangjiaEntity user = shangjiaService.selectOne(new EntityWrapper<ShangjiaEntity>().eq("shangjiabianhao", username));
		if(user==null || !user.getMima().equals(password)) {
			return R.error("账号或密码不正确");
		}
		String token = tokenService.generateToken(user.getId(), username,"shangjia",  "商家" );
		return R.ok().put("token", token);
	}
	
	/**
     * 注册
     */
	@IgnoreAuth
    @RequestMapping("/register")
    public R register(@RequestBody ShangjiaEntity shangjia){
    	//ValidatorUtils.validateEntity(shangjia);
    	ShangjiaEntity user = shangjiaService.selectOne(new EntityWrapper<ShangjiaEntity>().eq("shangjiabianhao", shangjia.getShangjiabianhao()));
		if(user!=null) {
			return R.error("注册用户已存在");
		}
		Long uId = new Date().getTime();
		shangjia.setId(uId);
        shangjiaService.insert(shangjia);
        return R.ok();
    }
	
	/**
	 * 退出
	 */
	@RequestMapping("/logout")
	public R logout(HttpServletRequest request) {
		request.getSession().invalidate();
		return R.ok("退出成功");
	}
	
	/**
     * 获取用户的session用户信息
     */
    @RequestMapping("/session")
    public R getCurrUser(HttpServletRequest request){
    	Long id = (Long)request.getSession().getAttribute("userId");
        ShangjiaEntity user = shangjiaService.selectById(id);
        return R.ok().put("data", user);
    }
    
    /**
     * 密码重置
     */
    @IgnoreAuth
	@RequestMapping(value = "/resetPass")
    public R resetPass(String username, HttpServletRequest request){
    	ShangjiaEntity user = shangjiaService.selectOne(new EntityWrapper<ShangjiaEntity>().eq("shangjiabianhao", username));
    	if(user==null) {
    		return R.error("账号不存在");
    	}
    	user.setMima("123456");
        shangjiaService.updateById(user);
        return R.ok("密码已重置为:123456");
    }


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,ShangjiaEntity shangjia, HttpServletRequest request){
        EntityWrapper<ShangjiaEntity> ew = new EntityWrapper<ShangjiaEntity>();
		PageUtils page = shangjiaService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, shangjia), params), params));

        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
	@IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,ShangjiaEntity shangjia, HttpServletRequest request){
        EntityWrapper<ShangjiaEntity> ew = new EntityWrapper<ShangjiaEntity>();
		PageUtils page = shangjiaService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, shangjia), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( ShangjiaEntity shangjia){
       	EntityWrapper<ShangjiaEntity> ew = new EntityWrapper<ShangjiaEntity>();
      	ew.allEq(MPUtil.allEQMapPre( shangjia, "shangjia")); 
        return R.ok().put("data", shangjiaService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(ShangjiaEntity shangjia){
        EntityWrapper< ShangjiaEntity> ew = new EntityWrapper< ShangjiaEntity>();
 		ew.allEq(MPUtil.allEQMapPre( shangjia, "shangjia")); 
		ShangjiaView shangjiaView =  shangjiaService.selectView(ew);
		return R.ok("查询商家成功").put("data", shangjiaView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") String id){
        ShangjiaEntity shangjia = shangjiaService.selectById(id);
        return R.ok().put("data", shangjia);
    }

    /**
     * 前端详情
     */
	@IgnoreAuth
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") String id){
        ShangjiaEntity shangjia = shangjiaService.selectById(id);
        return R.ok().put("data", shangjia);
    }
    



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody ShangjiaEntity shangjia, HttpServletRequest request){
    	shangjia.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(shangjia);
    	ShangjiaEntity user = shangjiaService.selectOne(new EntityWrapper<ShangjiaEntity>().eq("shangjiabianhao", shangjia.getShangjiabianhao()));
		if(user!=null) {
			return R.error("用户已存在");
		}
		shangjia.setId(new Date().getTime());
        shangjiaService.insert(shangjia);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody ShangjiaEntity shangjia, HttpServletRequest request){
    	shangjia.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(shangjia);
    	ShangjiaEntity user = shangjiaService.selectOne(new EntityWrapper<ShangjiaEntity>().eq("shangjiabianhao", shangjia.getShangjiabianhao()));
		if(user!=null) {
			return R.error("用户已存在");
		}
		shangjia.setId(new Date().getTime());
        shangjiaService.insert(shangjia);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody ShangjiaEntity shangjia, HttpServletRequest request){
        //ValidatorUtils.validateEntity(shangjia);
        shangjiaService.updateById(shangjia);//全部更新
        return R.ok();
    }
    

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        shangjiaService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
    
    /**
     * 提醒接口
     */
	@RequestMapping("/remind/{columnName}/{type}")
	public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, 
						 @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
		map.put("column", columnName);
		map.put("type", type);
		
		if(type.equals("2")) {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			Calendar c = Calendar.getInstance();
			Date remindStartDate = null;
			Date remindEndDate = null;
			if(map.get("remindstart")!=null) {
				Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
				c.setTime(new Date()); 
				c.add(Calendar.DAY_OF_MONTH,remindStart);
				remindStartDate = c.getTime();
				map.put("remindstart", sdf.format(remindStartDate));
			}
			if(map.get("remindend")!=null) {
				Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
				c.setTime(new Date());
				c.add(Calendar.DAY_OF_MONTH,remindEnd);
				remindEndDate = c.getTime();
				map.put("remindend", sdf.format(remindEndDate));
			}
		}
		
		Wrapper<ShangjiaEntity> wrapper = new EntityWrapper<ShangjiaEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}


		int count = shangjiaService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	
}

总结

技术选择与实现的成功:

通过选择Spring Boot作为开发框架,结合Java技术栈,我们成功构建了一个高效、稳定的外卖点餐系统。Spring Boot的自动配置和简化开发流程使得项目能够快速迭代和部署,从而满足了外卖点餐系统的实际需求。

用户体验的优化:

系统提供了直观易用的界面和流畅的操作体验,使用户能够方便地浏览菜品、下单、支付并跟踪订单状态。同时,个性化推荐功能提升了用户满意度,使得用户能够更快速地找到自己喜欢的菜品。

业务价值的提升:

外卖点餐系统的实施不仅提升了餐饮企业的服务质量和效率,还通过数据分析和挖掘为企业的产品创新和营销策略提供了有力支持。企业能够更准确地把握市场需求和消费者喜好,从而实现业务增长和竞争优势。

技术融合与创新的实践:

在外卖点餐系统的开发过程中,我们积极探索了新技术在系统中的应用,如人工智能、大数据等。这些技术的应用不仅提升了系统的智能化水平,也为未来的系统升级和功能扩展提供了技术基础。

人才培养与团队成长:

外卖点餐系统的开发是一个综合性的软件工程项目,涉及多个领域的知识和技能。通过参与该项目的开发,团队成员不仅提升了自身的专业技能和实践能力,还培养了团队协作和解决问题的能力。这为未来的软件工程项目开发提供了宝贵的人才储备和经验积累。

全套文档+PPT,支持远程技术部署。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1633720.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新时代教师口才演讲稿(3篇)

新时代教师口才演讲稿&#xff08;3篇&#xff09; 新时代教师口才演讲稿&#xff08;一&#xff09; 尊敬的各位领导、亲爱的同事们&#xff1a; 大家好&#xff01; 今天&#xff0c;我站在这里&#xff0c;深感荣幸与激动。在这个新时代里&#xff0c;教师的口才不仅仅是传…

后端java部署教程,docker配置解读(linux用docker部署新手入门)

文件夹结构 然后解读几个启动脚本 首先dockerFile # 使用anapsix/alpine-java:8_server-jre_unlimited作为基础镜像 FROM anapsix/alpine-java:8_server-jre_unlimited# 设置维护者信息 MAINTAINER adminxiaohuaikeji.com# 设置时区为Asia/Shanghai RUN ln -sf /usr/share/z…

组装nas的 神器 n100 ,改天组装一个!

N100的CPU性能虽然不是很强&#xff0c;性能接近4代i5移动端&#xff0c;但功耗很低&#xff0c;TDP只有6W&#xff0c;而且有个24单元的核显&#xff0c;解码视频能力不差。N100和Intel的i系列CPU是不同厂商生产的&#xff0c;并且它们的设计和架构也有所不同&#xff0c;因此…

Vitis HLS 学习笔记--Schedule Viewer 调度查看器

目录 1. 简介 2. Schedule Viewer详解 2.1 视图说明 2.1.1 Operation\Control Step 2.1.2 周期关系图 2.1.3 Schedule Viewer 菜单栏 2.1.4 属性视图 2.2 内容说明 2.2.1 实参&#xff08;b&#xff09;解释 2.2.2 实参&#xff08;a&#xff09;解释 2.2.3 变量&am…

# Windows 环境变量 Path 显示样式更改

Windows 环境变量 Path 显示样式更改 1、传统 Path 环境变量显示&#xff1a; ---》键盘上按【WIN I 】打开系统【设置】 ---》依次点击 ---》【系统】 ---》【系统信息】 ---》【高级系统设置】 ---》【高级】 ---》【环境变量】。或者依次点击&#xff1a; ---》右键 【我…

利用kimi等大模型进行运维参数解析和调优

在运维时&#xff0c;经常遇到很多参数&#xff0c;有些参数不知道意义&#xff0c;知道意义的也有些不知道合理参考值是多少。利用kimi等大模型来当老司机&#xff0c;轻松解决运维难题。 例如在运维hive参数时&#xff0c;有些不知道作用&#xff0c;提示次如下 你的角色是…

iOS上的UI是如何渲染出来的? 深入浅出UIKit渲染

我们在代码中写的View、Image等组件&#xff0c;最终是如何一步步渲染到屏幕上的呢&#xff1f;触摸、动画等是如何实现的&#xff1f;我们可以利用这些知识做哪些优化呢&#xff1f; 本文先从屏幕物理层原理出发&#xff0c;一步步介绍渲染流程&#xff0c;然后介绍iOS的UIKi…

go idea 不同区域的字体行距设置

1、代码区域的设置&#xff1a; 2、左侧project导航栏的设置&#xff1a; 3、问&#xff1a;go idea 底部的窗口&#xff0c;比如run、terminal、debug、version control等的设置&#xff1a;

pytorch 实现语义分割 PSPNet

语意分割是指一张图片上包含多个物体&#xff0c;通过语义分割可以识别物体分类、物体名称、像素识别的任务。和物体检测不同&#xff0c;他不会将物体框出来&#xff0c;而是根据像素的归属把物体标注出来。PSPNet 的输入是一张图片&#xff0c;例如300500&#xff0c;那么输出…

全志ARM-修改开发板内核启动日志

修改开发板内核日志输出级别&#xff1a; 默认输出级别为1&#xff0c;需要用超级用户权限修改 sudo vi /boot/orangepiEvn.txt 把第一行内核启动输出权限改为7&#xff0c;第二行把输出方式该为“serial”串口输出

QT:小项目:登录界面 (下一个连接数据库)

一、效果图 登录后&#xff1a; 二、项目工程结构 三、登录界面UI设计 四主界面 四、源码设计 login.h #ifndef LOGIN_H #define LOGIN_H#include <QDialog>namespace Ui { class login; }class login : public QDialog {Q_OBJECTpublic:explicit login(QWidge…

区块链技术下的DApp与电商:融合创新,开启商业新纪元

区块链技术的蓬勃发展正引领着一种新型应用程序的崛起——去中心化应用程序&#xff08;DApp&#xff09;。DApp并非传统的中心化应用&#xff0c;它构建于去中心化网络之上&#xff0c;融合了智能合约与前端用户界面&#xff0c;为用户提供了全新的交互体验。智能合约&#xf…

Leetcode—1146. 快照数组【中等】(ranges::lower_bound、std::prev函数)

2024每日刷题&#xff08;121&#xff09; Leetcode—1146. 快照数组 思路 题意很绕&#xff0c;解释一下&#xff1a; 拍一次照&#xff0c;复制出一个新数组&#xff0c;set 都在这个新的上面进行get 目标是得到第 id 个数组的特定位置的值 实现代码 class SnapshotArray…

ROS 2边学边练(39)-- 调试tf2

前言 这节还是围绕tf2来进行&#xff0c;只不过针对调试相关&#xff0c;把之前有过一面之缘的问题再次拿出来重点说明一下&#xff0c;此过程中我们会碰到之前几期中认识但还不怎么熟络的朋友比如tf2_echo、tf2_monitor、view_frames。 动动手 我们会利用一个有不少问题的例子…

Python-100-Days: Day06 Functions and Modules

函数的作用 编程大师Martin Fowler先生曾经说过&#xff1a;“代码有很多种坏味道&#xff0c;重复是最坏的一种&#xff01;”&#xff0c;要写出高质量的代码首先要解决的就是重复代码的问题。可以将特定的功能封装到一个称之为“函数”的功能模块中&#xff0c;在需要的时候…

JavaScript代码挑战#4

// 编程挑战 #4 /* 朱莉亚和凯特仍在研究狗&#xff0c;这次她们研究的是狗是否吃得太多或太少。 吃得太多意味着狗当前的食物份量比推荐份量大&#xff0c;吃得太少则相反。 吃得适量意味着狗当前的食物份量在推荐份量的正负 10% 的范围内&#xff08;参见提示&#xff09;。 …

企业邮箱哪个性价比高?2024年国内五大企业邮箱功能、价格对比

对于企业来说&#xff0c;更换企业邮箱的成本很高&#xff0c;包括企业邮箱数据迁移&#xff0c;新的通讯录导入等&#xff0c;都会耗时耗力。那么选择能稳定且性价比高的企业邮箱就至关重要&#xff0c;国内的Zoho Mail企业邮箱、网易企业邮箱、阿里企业邮箱、腾讯企业邮箱和新…

2024年宠物行业未来发展趋势(宠物行业增长风口深度报告)

近期&#xff0c;小红书联合第一财经发布了宠物行业洞察报告。报告中指出了宠物行业的三大消费新趋势&#xff1a;科学养宠、专宠专用和双向奔赴。而实际上&#xff0c;这三大趋势在2024年已经有明显的凸显。 趋势一&#xff1a;科学养宠 科学养宠主要体现在宠物主粮的选择上&…

Linux进程概念(七):进程替换 自主shell的编写

目录 进程替换 六种替换函数 自主shell的编写 shell解析命令行字符串的过程 创建makefile 打印输出命令行 获取与分割命令行字符串 多次执行命令 完善工作 完整代码 进程替换 原因&#xff1a;fork创建子进程后&#xff0c;执行的是和父进程相同的代码&#xff0c;…

Spring6 当中 获取 Bean 的四种方式

1. Spring6 当中 获取 Bean 的四种方式 文章目录 1. Spring6 当中 获取 Bean 的四种方式每博一文案1.1 第一种方式&#xff1a;通过构造方法获取 Bean1.2 第二种方式&#xff1a;通过简单工厂模式获取 Bean1.3 第三种方式&#xff1a;通过 factory-bean 属性获取 Bean1.4 第四种…