【JavaEE】JavaEE进阶:框架的学习 - Spring的初步认识

JavaEE进阶首章

在这里插入图片描述

文章目录

  • 【JavaEE】JavaEE进阶:框架的学习 - Spring的初步认识
    • 1. JavaEE初阶 与 JavaEE进阶 开发上的区别
      • 1.1 Servlet VS Spring Boot
      • 1.2 Spring Boot的 “hello world”代码演示
        • 1.2.1 Spring Boot项目的创建
        • 1.2.2 hello world
        • 1.2.3 发布
    • 2. 框架的学习
    • 3. Spring的初步认识
      • 3.1 Spring是什么
      • 3.2 IoC是什么
      • 3.3 IoC的好处
        • 3.3.1 传统程序开发模式
        • 3.3.2 Spring开发模式

【JavaEE】JavaEE进阶:框架的学习 - Spring的初步认识

在之前的学习中,我们已经掌握了Servlet的框架去完成一个项目,而目前企业正在使用的技术则是我们接下来重点学习的!

本文章为 JavaEE进阶的第一篇文章,JavaEE进阶我们将学习:

  1. Spring全家桶
    • Spring / Spring Boot/ Spring MVC,Spring Cloud为社招必须,校招不须
  2. MyBatis
  3. Redis

最后,我们将对我们之前做的项目进行优化,或者说重新用这些框架写一遍这些代码~

1. JavaEE初阶 与 JavaEE进阶 开发上的区别

虽然我们在JavaEE初阶就学习了一个小框架,Servlet,用得也不错,也好像省去很多功夫,几行后端代码就能完成很多功能,但是这是在JavaEE进阶之前的认知!

而JavaEE进阶学习的框架将更加的方便!

  • 框架的存在就是**“人类的懒”**,框架就是为了方便开发,提高开发效率,所以越好的框架,使用起来就应该越方便~
  • Spring全家桶其实就是这么一个很好的东西,开源框架!

有人比喻“学习框架就像从小作坊到小工厂的升级”

  • 所以学完之后,我们会发现原来的日子过得那么的惨🤣

接下来就让我们来对比一下,Servlet 与 Spring Boot

1.1 Servlet VS Spring Boot

Servlet涉及的东西不必多说,我们谈谈Spring Boot的优点

  1. 无需配置Tomcat,在项目中“点击运行”即可
    • 这是因为Spring Boot内置了Web容器,代替了原本的Web容器Tomcat!
  2. 快速添加外部jar包
  3. 快速发布项目(例如:可以使用 java -jar 方式,就可以发布)
  4. 对象自动装配

接下来我们演示一下Spring Boot开发(不必在意为什么,就看看方不方便)

Servlet的开发参考博客:【JavaEE】Tomcat-Servelet第一个helloworld程序_s:103的博客-CSDN博客

1.2 Spring Boot的 “hello world”代码演示

1.2.1 Spring Boot项目的创建

首先我们要在IDEA创建Spring项目,则需要去下载一个插件:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

下一步:

  • 选择项目类型
  • 选择语言
  • 选择打的包的类型
  • 选择java的jdk的版本

在这里插入图片描述

  • 不用改为war包,war包是啊佩奇的Servlet的要求
  • 所以点这个会额外多个类

在这里插入图片描述

下一步:

  • jdk8只能使用2头的版本
  • 选择用到的工具/插件/jar包

在这里插入图片描述

下一步:

在这里插入图片描述

点击finish即可~

在这里插入图片描述

判断是否创建成功:

在这里插入图片描述

  • 下面那个就是打war包的(重新创建一个吧~)

在这里插入图片描述

在这里插入图片描述

然后自动加载~

配置国内源(不然会很慢):

在这里插入图片描述

在对应目录里创建个settings.xml:

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"><pluginGroups></pluginGroups><proxies></proxies><servers></servers><mirrors><mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf></mirror></mirrors><profiles></profiles>
</settings>

在这里插入图片描述

这样会比较快~

或者找我拿一个xml文件~

  • 直接下载到那个目录下即可,(我的xml文件的内容更多),但是刚才的代码也够用~
  • 前提是你那个目录原本是没有settings.xml的,如果本来就有,就只需要插入刚才的代码进去即可

版本号2.7.13后面那个单词删后,再刷新加载:

在这里插入图片描述

创建不了项目(返回500,可能是因为网络的问题,可能是你的梯子的原因),重新创建几次就行了

在这里插入图片描述

1.2.2 hello world

ctrl shift f10运行它

在这里插入图片描述

  • 需要打开个插件

我们现在还有很多配置没弄,所以我就用网图来解释了:

在这里插入图片描述

我们没有配置smart tomcat,就可以运行起来了~

在这里插入图片描述

一个类对应多个url:

在这里插入图片描述

运行:

  • 访问127.0.0.1:8080/注解名 即可
  • 不需要项目名,因为这个端口肯定只有一个项目目前在用(Servlet多此一举),所以用注解名就能确保唯一性了
    在这里插入图片描述

1.2.3 发布

在这里插入图片描述

通过日志找到jar包

  1. 命令行java -jar demo.jar,就可以自动启动Tomcat,网站也可以访问
  2. 将这个自动生成jar包,部署在网站就ok了,这个以后再讲~

所以SpringBoot:

  1. 添加外部jar包更容易,无需关注版本问题
  2. 运行项目更方便,无需配置tomcat
  3. 发布项目更方便,无需配置tomcat
  4. 添加路由更方便,无需写多个类,一个方法就可以是一个路由

2. 框架的学习

  1. 基础框架Spring开始(工具箱)
  2. Spring Boot快速开发Spring脚手架
  3. MyBatis快速操作数据库
  4. 其他:日志、事物、拦截器…

3. Spring的初步认识

3.1 Spring是什么

Spring 是一个开源的轻量级 Java 开发框架,它旨在简化 Java 应用程序的开发。Spring 提供了丰富的功能和组件,用于构建各种类型的应用程序,包括企业级应用、Web 应用、移动应用等。

指的就是Spring Framework

一句话概况Spring:Spring是包含了众多工具方法的IoC容器

  • 这些工具方法就是我们要积累的学习的工具方法~

那问题来了,什么是容器,什么是IoC?

容器就是用来容纳其他物品的装置。

例如:

  1. List/Map是数据存储 容器
  2. Tomcat是Web 容器

而Spring则是IoC 容器

IoC = Inversion of Control 翻译成中文就是“控制反转”,也就是说Spring是“控制反转”容器,这样回答是0分的,因为控制反转就是直译,回答面试官要表达明确的含义!

3.2 IoC是什么

get英语的含义则是:“控制权的反转”

这个控制权是一部分代码,例如对象创建/对象的生命周期的“控制权”,属于程序员,而现在反转了,属于Spring

  • 不是方向的反转,而是“剧情的反转”

  • 也就是说Spring现在有权利去控制一部分代码,在开发过程中

例如你有一个类A,不需要new A()了,直接向Spring框架要一个即可

当然,这样讲还是有点笼统,接下来用一个例子一段代码让你感受其含义

  • 一个普通的java项目

3.3 IoC的好处

以一辆车为例:
在这里插入图片描述

  1. 传统开发就相当于,每次获得拿一辆车,就得现场造
  2. Spring就相当于在车库里面取

并且IoC的优点有:松耦合

  • 低耦合

3.3.1 传统程序开发模式

在这里插入图片描述

通过init方法去造车:

在这里插入图片描述

运行结果:

在这里插入图片描述

但是,根据常识,不限于这辆车(Car是一个虚拟的例子),一个产品往往需要满足用户的一些特殊需求,做出一些“定制”的东西~

  • 这辆车,我身材高达,我想要轮子大一点;我身材瘦小,我想要轮子小一点…

对于刚才的开发模式,我们就要做出以下改动:

在这里插入图片描述

运行结果:

在这里插入图片描述

在这里插入图片描述

你可能已经发现了,这样的耦合性太高了,增加这么一个功能,就要改这么多代码,我要求更多,要改的代码就越多了

3.3.2 Spring开发模式

在这里插入图片描述

通过init方法去造车:

在这里插入图片描述

在这里插入图片描述

  • 通过new Test()的方式去拿到“框架”里的一个car实例

运行结果:

在这里插入图片描述

同样的,我要是想要大轮子或者小轮子:

我们只需要在“向框架拿Tire对象的时候”,去拿另一个Tire对象

在这里插入图片描述

运行结果:

在这里插入图片描述

在这里插入图片描述

可见,IoC很好的实现了“松耦合”!


文章到此结束!谢谢观看
可以叫我 小马,我可能写的不好或者有错误,但是一起加油鸭🦆

代码链接:IoC-understand/src · 游离态/马拉圈2023年7月 - 码云 - 开源中国 (gitee.com)

具体Spring项目如何去开发,要点有哪些,下一篇博客会有很好的感受!


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

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

相关文章

分区类型ID一键变身!快速改变分区类型ID的简单方法

分区类型ID是什么&#xff1f; 想要改变分区类型ID&#xff0c;先得明白分区类型ID是什么。大多数电脑用户可能只熟悉分区和分区类型&#xff0c;实际上有5种分区类型&#xff1a;主分区、可扩展固件接口&#xff08;EFI&#xff09;、扩展分区、逻辑分区和Microsoft保留分…

idea 自定义类注释模板和方法模板,无警告

背景&#xff1a;idea&#xff1a;IntelliJ IDEA 2023.1.3 (Ultimate Edition) 效果&#xff1a;&#xff08;主要是没无参&#xff0c;不会换行&#xff09; 类&#xff1a; /** * author sss* date ${DATE} on ${TIME}* desc $NAME*/# 完全复制上面的&#xff0c;删除这一行…

ES6标准下在if中进行函数声明

ES5中规定&#xff0c;函数只能在顶层作用域或函数作用域之中声明&#xff0c;不能在块级作用域声明。 // 情况一 if (true) {function f() {} }// 情况二 try {function f() {} } catch(e) {// ... }上面两种函数声明&#xff0c;根据 ES5 的规定都是非法的。但是&#xff0c…

【C++】将类对象转换成基本数据类型

2023年7月19日&#xff0c;周三晚上&#xff1a; 今天晚上看源码的时候&#xff0c;突然在某个类里面看到了“operator bool() const;”&#xff0c;我完全想不起来这是啥意思了&#xff0c;于是今晚重新学习了一下 目录 类型转换函数的定义类型转换函数的作用 类型转换函数的…

王道计算机网络学习笔记(5)——传输层和应用层

前言 文章中的内容来自B站王道考研计算机网络课程&#xff0c;想要完整学习的可以到B站官方看完整版。 五&#xff1a;传输层 5.1&#xff1a;传输层基本概述 传输层的功能&#xff1a; 1传输层提供进程和进程之间的逻辑通信 2复用和分用 微信和QQ都使用传输层的协议进行发…

Vue3基础知识

文章目录 第一章 vue3 安装1.1安装1.2开启服务器1.3 使用图形化界面1.4 Vite1.5 vue3项目打包1.6 vue3 创建项目1.6.1 vue create命令1.6.2 创建一个项目 第二章 vue3 基础2.1 vue3 的目录结构2.2 vue3 的起步2.2.2 data 选项2,2.3 methods 2.3 Vue3 指令2.4 vue3 模板语法2.4.…

vue3和tauri直接下载Binary 数组的二进制文件内容到本地

通过发送url请求&#xff0c;直接获取到一个文件的Binary 数组内容&#xff0c;然后通过tauri的api&#xff1a;writeBinaryFile保存文件到本地电脑。 发送请求的时候&#xff0c;要加上响应类型&#xff1a;responseType: ResponseType.Binary 然后等返回的响应内容&#xf…

Chat GPT是什么,初学者怎么使用Chat GPT,需要注意些什么

目录 Chat GPT是什么 初学者怎么使用Chat GPT 使用Chat GPT需要注意什么 一些简单的prompt示例 Chat GPT是什么 Chat GPT是由OpenAI开发的一种大型语言模型&#xff0c;它基于GPT&#xff08;Generative Pre-trained Transformer&#xff09;架构。GPT是一种基于深度学习的…

应对突发流量,如何快速为自建 K8s 添加云上弹性能力

作者&#xff1a;庄宇 以 Kubernetes 为代表的容器技术带来的是一种应用交付模式的变革&#xff0c;其正迅速成为全世界数据中心的统一 API。 为了保证业务持续稳定、用户访问不中断&#xff0c;高可用、高弹性等能力是应用架构设计不变的追求&#xff0c;多集群架构天然具备…

使用 uiautomator2+pytest+allure 进行 Android 的 UI 自动化测试

目录 前言&#xff1a; 介绍 pytest uiautomator2 allure 环境搭建 pytest uiautomator2 allure pytest 插件 实例 初始化 driver fixture 机制 数据共享 测试类 参数化 指定顺序 运行指定级别 重试 hook 函数 断言 运行 运行某个文件夹下的用例 运行某…

【软件测试面试】腾讯数据平台笔试题-接口-自动化-数据库

数据库题 答案&#xff1a; Python编程题 答案&#xff1a; 接口参数化题 答案&#xff1a; 接口自动化题 答案&#xff1a; 以下是我收集到的比较好的学习教程资源&#xff0c;虽然不是什么很值钱的东西&#xff0c;如果你刚好需要&#xff0c;可以评论区&#…

高斯误差线性单元激活ReLU以外的神经网络

高斯误差线性单位&#xff08;GELU&#xff09;激活函数由加州大学伯克利分校的Dan Hendrycks和芝加哥丰田技术研究所的Kevin Gimpel于2018年引入。激活函数是触发神经元输出的“开关”&#xff0c;随着网络的深入&#xff0c;其重要性也随之增加。最近几周&#xff0c;机器学习…

create database创建数据库失败

瀚高数据库 目录 环境 症状 问题原因 解决方案 环境 系统平台&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本&#xff1a;4.5.7 症状 1、执行如下sql语句创建数据库报错。 create database printcdburn with encodingUTF8 OWNERprintcdburn LC_COLLATEzh_CN.UTF-…

github 最简单的使用步骤(个人学习记录~)

github 使用步骤&#xff1a; (11条消息) github新手用法详解&#xff08;建议收藏&#xff01;&#xff01;&#xff01;&#xff09;_github详解_怪 咖的博客-CSDN博客 1.获取ssh密钥 打开输入&#xff1a;ssh-keygen -t rsa -C “git账号” 输入之后一路Enter&#xff08…

谈谈VPN是什么、类型、使用场景、工作原理

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 前言 本文将讲解VPN是什么、以及它的类型、使用场景、工作原理。 目录 一、VPN是什么&#xff1f; 二、VPN的类型 1、站点对站点VPN 2、…

labview 弹窗(子vi)

如果你遇到了需要在主vi运行时需要弹窗某个窗口(或者称为子vi,子画面)&#xff0c;而且要主画面和子画面能独立运行各自的循环程序&#xff0c;本文能给你帮助。 本文的精髓在于: wait until Donefalse,表示子VI运行的同时&#xff0c;主vi也继续运行后面的代码&#xff0c;主…

win10下解决git报错 Permission denied(publickey)

今天在csdn的GitCode新建了一个项目&#xff0c;然后在windows下git clone时出现错误 gitgitcode.net: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. 完整…

Apache Doris (三十一):Doris 数据导入(九)Spark Load 4- 导入Hive数据及注意事项

目录 1. Spark Load导入Hive非分区表数据 2. Spark Load 导入Hive分区表数据 3. 注意事项 进入正文之前&#xff0c;欢迎订阅专题、对博文点赞、评论、收藏&#xff0c;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; 宝子们订阅、点赞、收藏不迷路&#xff01;抓紧…

拼多多API接口,百亿补贴商品详情页面采集

电商API的数据类型 电商API提供的数据种类多样&#xff0c;一般可分为以下几类&#xff1a; 1.商品数据&#xff1a;商品ID、商品名称、商品价格、库存等。 2.交易数据&#xff1a;订单号、付款时间、收货人等。 3.店铺数据&#xff1a;店铺ID、店铺名称、开店时间、店铺评…

使用Canal同步mysql数据到es

一、简介 Canal主要用途是基于 MySQL 数据库增量日志解析&#xff0c;提供增量数据订阅和消费。 当前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.x , 5.7.x , 8.0.x 二、工作原理 MySQL主备复制原理 MySQL master 将数据变更写入二进制日志( binary log, 其中记…