【Maven】Maven 下载安装教程(超详细)(day30)

1 学习目标

  1. 了解Spring
  2. 了解SpringBoot
  3. 重点掌握创建SpringBoot项目
  4. 重点掌握聚合项目的创建
  5. 了解Spring基于XML方法进行IOC和依赖注入
  6. 了解Maven的概念
  7. 重点掌握使用Maven构建项目
  8. 重点掌握使用Maven进行依赖引入

2 Maven

2.1 概述

  • Maven是跨平台的项目管理工具。
  • 作为Apache组织中的一个颇为成功的开源项目,主要服务于基于java平台的项目构建、依赖管理和项目信息管理。无论是小型的开源类库项目,还是大型的企业级应用;无论是传统的瀑布式开发,还是流行的敏捷模式,Maven都能大显身手。

2.2 为何需要Maven?

  • Java工程中我们自己去找jar,或者来自官网,或者来自网友的分享,或者来自项目团队的共享,不论何种方式,都需要把jar文件复制到lib目录中,并且Add As Library...

  • 而Maven改变这种手动维护jar的方式,设计出一套自动维护jar的体系,已经广泛在软件项目中使用,是软件开发人员必须掌握的技术。

2.3 Maven的安装

  • Maven是可以自行安装的,但是我们学习阶段使用idea自带的Maven就可以了,在idea的File → Settings → Build, Execution, Deployment → Build Tools → Maven下可以进入Maven面板

2.4 Maven的仓库配置

  • Maven默认从Maven官网下载jar包资源,全球都去下载,又是国外网站,因此速度缓慢。
  • 所以建议配置为阿里镜像服务器,下载速度快。

2.4.1 步骤设置

①下载我的百度网盘资源

通过网盘分享的文件:settings.xml 链接:

②然后将settings.xml文件存储到idea的maven配置面板User settings file的相同路径

**注意:**如果在定位目录时,发现没有.m2目录,自己创建即可

2.5 创建Maven项目

  • 由于idea版本不同,可能具体步骤会稍有差异,不过大同小异

①依次点击如下路径:File → New → Project...,打开创建项目面板

②选中Maven选项,点击Next即可

③依照自己实际情况项目相关内容,点击Finish即可创建完成

2.6 引入依赖

2.6.1 创建模块

①选中当前项目,右键,在弹出的面板中,选择New→Module...

②填写模块信息,此处和创建maven项目是一样的

2.6.2 项目测试

①在02-MavenDemo项目中,添加TestJDBC类,该类执行时会报如下错误

  • 原因是因为当前项目中是没有jdbc的jar包的,所以就会执行失败

②而Maven项目可以自动从仓库中下载jar包,但是如果要下载jar包,需要通过Maven坐标去下载,所以打开项目中的pom.xml文件

③在pom.xml文件中,添加JDBC的坐标

  • <dependencies></dependencies>的作用是声明项目的所有依赖库(jar包)
  • <dependency></dependency>的作用是声明一个特定依赖库的元素(jar包)
<!--JDBC的坐标-->
<dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.32</version></dependency>
</dependencies>

④但是此时并不会开始下载jar包,而是需要我们手动刷新Maven,所以点击pom.xml文件右上角的刷新按钮,即可下载成功

⑥此时执行TestJDBC程序,发现执行成功,说明已经成功通过Maven项目引入jar包

3 Spring简介

3.1 什么是Spring(了解)

  • Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架,以**IOC(Inverse Of Control:反转控制)和AOP**(Aspect Oriented Programming:面向切面编程)为内核。
  • 提供了**展现层 SpringMVC持久层 Spring JDBCTemplate** 以及**业务层事务管理**等众多的企业级应用技术 ,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的Java EE 企业应用开源框架。

3.2 Spring的优势(了解)

  • 方便解耦,简化开发 通过 Spring 提供的 IoC容器,可以将对象间的依赖关系交由 Spring 进行控制,避免硬编码所造成的过度耦合。

    用户也不必再为单例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。

  • AOP 编程的支持 通过 Spring的 AOP 功能,方便进行面向切面编程,许多不容易用传统 OOP 实现的功能可以通过 AOP 轻松实现。

  • 声明式事务的支持 可以将我们从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活的进行事务管理,提高开发效率和质量。

  • 方便程序的测试 可以用非容器依赖的编程方式进行几乎所有的测试工作,测试不再是昂贵的操作,而是随手可做的事情。

  • 方便集成各种优秀框架 Spring对各种优秀框架(Struts、Hibernate、Hessian、Quartz等)的支持。

  • 降低 JavaEE API 的使用难度 Spring对 JavaEE API(如 JDBC、JavaMail、远程调用等)进行了薄薄的封装层,使这些API 的使用难度大为降低。

  • Java 源码是经典学习范例 Spring的源代码设计精妙、结构清晰、匠心独用,处处体现着大师对Java 设计模式灵活运用以及对 Java技术的高深造诣。它的源代码无意是 Java 技术的最佳实践的范例。

4 SpringBoot简介

4.1 什么是SpringBoot

  • SpringBoot提供了一种快速使用Spring的方式,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目周期。2014 年 4 月,Spring Boot 1.0.0 发布。Spring的顶级项目之一(https://spring.io)。

4.2 SpringBoot的功能(了解)

  • 自动配置 Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个。该过程是SpringBoot自动完成的。
  • 起步依赖 起步依赖本质上是一个Maven项目对象模型,定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。
  • 辅助功能 提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等。

5 SpringBoot项目的创建

①点击File→New→Project...

②点击Spring Initializr选项,填写对应的项目信息,之后点击Next

③选择对应的版本和工具,但是目前只是初学阶段,什么工具也不需要,直接点击Finish即可

6 创建SpringBoot模块

①选中当前项目,右键,点击New→Module...

②然后选择想要创建的项目类型,这里我们假设再创建一个SpringBoot项目,操作方式和创建项目完全一样,填写项目信息,然后点击Next

  • 如果Server URL默认的start.spring.io一直不能使用,可以替换为start.springboot.io

③选择对应的版本和工具,但是目前只是初学阶段,直接点击Finish即可

7 使用SpringBoot书写JDBC代码

①打开JSDSecondStage项目中SpringBootDemo模块下的pom.xml文件中的parent标签中的version的版本号更改为2.5.4

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.4</version><relativePath/> <!-- lookup parent from repository -->
</parent>

②并在pom.xml中引入JDBC的依赖

<!--JDBC的坐标-->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.32</version>
</dependency>

③然后刷新pom.xml文件

④然后将TestJDBC类放在包下,执行程序,测试成功即可

在Spring框架中,有两种开发模式

一种是XML方式,另一种是注解方式,我们简单了解一下XML方式

并通过这个方式了解一下Spring中的两个比较重要的特性,后面我们再用注解的方式来学习

8 Spring基于XML方式开发

8.1 资源准备

  • 在JSDSecondStage项目下,创建SpringXMLDemo模块,我们在该模块下简单学习Spring基于XML的方式开发

8.2 Spring的IOC

8.2.1 什么是IOC

  • Inversion of Control,控制反转。
  • IOC主要是一种设计思想。在应用程序中,原本由程序主动去new依赖对象,变成了由IOC容器来控制对象的创建。
  • 所以,所谓的控制反转,控制指的是IOC容器控制了对象的创建,反转指的是程序依赖IOC容器来注入对象。

8.2.2 bean标签的基本配置

用于配置对象交由Spring来创建。

默认情况下它调用的是类中的无参构造函数,如果没有无参构造函数则不能创建成功。

基本属性:

id:Bean实例在Spring容器中的唯一标识

class:Bean的全限定名称

8.2.3 准备User实例

  • 将**pojo/User**类导入项目中,用于后面的实例化操作

8.2.4 添加Spring核心配置

  • application.xml文件直接复制到resources目录中即可
<?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"><!--将User对象的创建交给Spring管理--><!--id:该类在Spring容器的唯一标识--><!--class:该类的全限定名称--><bean id="user" class="cn.tedu.pojo.User"></bean>
</beans>

8.2.5 编写TestBean

package cn.tedu.test;import cn.tedu.pojo.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** 使用Spring的API获取Bean实例*/
public class TestBean {public static void main(String[] args) {//1.加载配置文件ApplicationContext applicationContext = newClassPathXmlApplicationContext("application.xml");//2.通过id获取Spring管理的user对象User user1 = (User) applicationContext.getBean("user1");System.out.println("user1 = " + user1);}
}

8.3 Spring的DI

8.3.1 什么是DI

  • 依赖注入(Dependency Injection):它是 Spring 框架核心 IOC 的具体实现。组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。

8.3.2 Bean的依赖注入概念

  • 通过property标签配置的属性值会通过setXxx()方法注入
    • name属性: "setXXX"后面的"XXX"首字母改小写
    • value属性: 该属性具体的值
  • 通过constructor-arg标签配置的属性值会通过构造器注入
    • value属性: 该属性具体的值

8.3.3 SET方式注入

8.3.3.1 修改Spring核心配置文件
<?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"><!--将User对象的创建交给Spring管理--><!--id:该类在Spring容器的唯一标识--><!--class:该类的全限定名称--><bean id="user1" class="cn.tedu.pojo.User"></bean><!--通过set方式注入--><bean id="user2" class="cn.tedu.pojo.User"><property name="name" value="夏史壬"></property><property name="age" value="66"></property></bean>
</beans>
8.3.3.2 编写TestBean
package cn.tedu.test;import cn.tedu.pojo.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** 使用Spring的API获取Bean实例*/
public class TestBean {public static void main(String[] args) {//1.加载配置文件ApplicationContext applicationContext = newClassPathXmlApplicationContext("application.xml");//2.通过id获取Spring管理的user对象User user1 = (User) applicationContext.getBean("user1");System.out.println("user1 = " + user1);User user2 = (User) applicationContext.getBean("user2");System.out.println("user2 = " + user2);}
}

8.3.4 构造器注入

8.3.4.1 修改Spring核心配置文件
<?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"><!--将User对象的创建交给Spring管理--><!--id:该类在Spring容器的唯一标识--><!--class:该类的全限定名称--><bean id="user1" class="cn.tedu.pojo.User"></bean><!--通过set方式注入--><bean id="user2" class="cn.tedu.pojo.User"><property name="name" value="夏史壬"></property><property name="age" value="66"></property></bean><!--构造器注入--><bean id="user3" class="cn.tedu.pojo.User"><constructor-arg value="魏朱"/><constructor-arg value="11"/></bean>
</beans>
8.3.4.2 编写TestBean
package cn.tedu.test;import cn.tedu.pojo.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** 使用Spring的API获取Bean实例*/
public class TestBean {public static void main(String[] args) {//1.加载配置文件ApplicationContext applicationContext = newClassPathXmlApplicationContext("application.xml");//2.通过id获取Spring管理的user对象User user1 = (User) applicationContext.getBean("user1");System.out.println("user1 = " + user1);User user2 = (User) applicationContext.getBean("user2");System.out.println("user2 = " + user2);User user3 = (User) applicationContext.getBean("user3");System.out.println("user3 = " + user3);}
}

9 总结

1 什么是SpringBoot

SpringBoot提供了一种快速使用Spring的方式,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目周期。

2 Spring的bean标签的作用

  • 用于配置对象交由Spring来创建。默认情况下它调用的是类中的无参构造函数,如果没有无参构造函数则不能创建成功。

3 什么是IOC和DI?

  • IOC:翻译过来是控制反转,将对象的创建权由Spring管理,HelloService不需要自己去创建,Spring可以帮你创建。
  • DI:依赖注入,在我们创建对象的过程中,把对象依赖的属性注入到我们的类中。
  • 我们现在编写的类是没有其它的属性的,如果你学过UML这种设计的话,面向对象中对象中的几种关系
  • 简单来说,IoC更像是一种思想,DI是一种行为。
  • 另一种说法是,ioc是目的,di是手段。ioc是指让生成类的方式由传统方式(new)反过来,既程序员不调用new,需要类的时候由框架注入(di),是同一件不同层面的解读。

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

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

相关文章

Python(一)-快速入门

第一个入门实例 print(hello python) 注释 #:单行注释""" """:多行注释 # 这是单行注释 # 输出一个喜欢读的课外书 print("我最喜欢读 追风筝的人")print("----------------------------")"""这是多…

Python爱心射线

系列目录 序号直达链接表白系列1Python制作一个无法拒绝的表白界面2Python满屏飘字表白代码3Python无限弹窗满屏表白代码4Python李峋同款可写字版跳动的爱心5Python流星雨代码6Python漂浮爱心代码7Python爱心光波代码8Python普通的玫瑰花代码9Python炫酷的玫瑰花代码10Python多…

004——双向链表和循环链表

目录 双向链表 双向链表的初始化&#xff08;与单链表类似&#xff09; 增&#xff1a; Ⅰ&#xff09;头插法 Ⅱ&#xff09;尾插法 Ⅲ&#xff09;中间插入 删 改 查 整体代码示例&#xff1a; 循环链表 循环单链表 ​编辑 循环双链表 双向链表 不同于单链表&…

2024年录屏神器大盘点,轻松捕捉屏幕精彩

现在讲解一些操作越来越便捷了&#xff0c;我 一般都是用录屏工具来边录制操作边讲解&#xff0c;这样可以更方便对方了解操作步骤。这次我就分享几款免费录屏工具一起来试试吧。 1.福晰录屏软件 链接&#xff1a;www.foxitsoftware.cn/REC/ 对于初次尝试录屏的新手来说&…

每天五分钟玩转深度学习框架PyTorch:获取神经网络模型的参数

本文重点 当我们定义好神经网络之后,这个网络是由多个网络层构成的,每层都有参数,我们如何才能获取到这些参数呢?我们将再下面介绍几个方法来获取神经网络的模型参数,此文我们是为了学习第6步(优化器)。 获取所有参数Parameters from torch import nn net=nn.Sequent…

Java | Leetcode Java题解之第397题整数替换

题目&#xff1a; 题解&#xff1a; class Solution {public int integerReplacement(int n) {int ans 0;while (n ! 1) {if (n % 2 0) {ans;n / 2;} else if (n % 4 1) {ans 2;n / 2;} else {if (n 3) {ans 2;n 1;} else {ans 2;n n / 2 1;}}}return ans;} }

UE5引擎工具链知识点

当我们提到“引擎工具链的开发”时&#xff0c;通常指的是为游戏开发或其他类型的软件开发创建一系列工具和技术栈的过程。这包括但不限于游戏引擎本身&#xff08;如Unity或Unreal Engine&#xff09;&#xff0c;以及围绕这些引擎构建的各种工具和服务&#xff0c;比如用于构…

CTFHub技能树-Git泄漏-Index

目录 一、Git索引&#xff08;Index&#xff09;的基本概念 二、解题过程 主旨&#xff1a;使用git泄漏恢复源代码 方法一&#xff1a;使用GitHack手动恢复 方法二&#xff1a;直接使用Git_Extract获取网站源代码拿去flag 当前大量开发人员使用git进行版本控制&#xff0c…

新书宣传:《量子安全:信息保护新纪元》

《量子安全&#xff1a;信息保护新纪元》 前言本书的看点本书的目录结语 前言 你好&#xff01; 这是我第一次发布类广告的博文&#xff0c;目的也很单纯&#xff0c;希望以作者的身份介绍一下自己出版的图书——《量子安全&#xff1a;信息保护新纪元》。此书于2024年7月出版…

【鸿蒙】HarmonyOS NEXT星河入门到实战1-开发环境准备

目录 一、达成目标 二、鸿蒙开发环境准备 2.1 开发者工作下载 2.2 解压安装 2.3 运行配置安装node.js和SDK 2.4 开始创建第一个项目 2.5 预览 2.5.1 预览遇到的问题&#xff08;报错&#xff09; 2.5.2 修改内容查看预览 三、备用下载地址&#xff08;如果下载是4.X版…

会声会影2024发布了没有? 会声会影2024更新哪些内容?

嘿&#xff0c;亲爱的的朋友们&#xff0c;今天我要跟大家安利一款让我彻底沉迷、不能自拔的神器 —— 会声会影2024&#xff01;如果你还在为视频编辑头疼&#xff0c;那么准备好迎接你的救星吧&#xff01; 会声会影2024是一款功能全面的视频编辑软件&#xff0c;它不仅能帮你…

基于Logistic-Map混沌序列的数字信息加解密算法matlab仿真,支持对文字,灰度图,彩色图,语音进行加解密

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于Logistic-Map混沌序列的数字信息加解密算法matlab仿真,系统包含GUI操作界面&#xff0c;系统支持对文字,灰度图,彩色图,语音进行加解密。 2.测试软件版本以及…

人工智能在C/C++中的应用

随着技术的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已经成为我们日常生活中不可或缺的一部分。从智能手机的语音助手到自动驾驶汽车&#xff0c;AI的应用无处不在。在众多编程语言中&#xff0c;C和C因其高性能和灵活性&#xff0c;成为实现复杂AI算法的理想选…

分类预测|基于雪消融优化BP神经网络的数据分类预测Matlab程序SAO-BP 多特征输入多类别输出 含基础程序

分类预测|基于雪消融优化BP神经网络的数据分类预测Matlab程序SAO-BP 多特征输入多类别输出 含基础程序 文章目录 一、基本原理二、实验结果三、核心代码四、代码获取五、总结 一、基本原理 SAO-BP模型结合了雪消融优化算法&#xff08;SAO&#xff09;和BP神经网络。以下是详细…

Linux中使用node xxx.js启动进程后终端关闭进程会自动关闭的解决方案

原标题&#xff1a;在Linux中想要运行一个node程序&#xff0c;但随着终端关闭&#xff0c;其node进程会自动关闭的解决方案&#xff1a; 使用nohup 运行命令&#xff0c;其中的app.js是你要运行的js output.log是运行日志 nohup node app.js > output.log 2>&1 &…

一. rpc基本学习

1. 什么是rpc&#xff0c;为什么有了http还要rpc 我们常说的http&#xff0c;应该是说的http1&#xff0c;http只是应用层的一个协议 Rpc是一种调用方式&#xff0c;全称叫远程过程调用&#xff0c;对应本地调用&#xff0c;rpc是一种调用方式&#xff0c;不是一种协议 更具体…

Marin说PCB之在CST软件中如何搭建两端子电容器--02

上回书到说到李相赫同学在导入一颗新的两端子电容器物料的时候&#xff0c;发现其阻抗频率特性曲线太反常了&#xff1a; 和之前的Murata家的GRT033D70E105ME18这个物料放在一起比对一下&#xff1a; 上编文章中有一句话我不知道诸位道友们是否还有印象啊&#xff1f; Murata家…

断点回归模型

断点回归&#xff08;Regression Discontinuity Design, RDD&#xff09;是一种准实验设计方法&#xff0c;用于评估政策或其他干预措施的效果。这种方法利用了一个清晰的阈值或“断点”&#xff0c;在这个阈值上&#xff0c;处理状态&#xff08;例如是否接受某种干预&#xf…

2-2 opencv实战进阶系列 多边形识别

目录 一、不说废话&#xff0c;先上现象 二、前言 三、思路讲解 step1&#xff1a;用阈值编辑器对图像进行处理。 step2&#xff1a;应用阈值进行二值化 step3&#xff1a;轮廓查找 step4&#xff1a; 显示文字 四、完整代码贴出 五、现象展示 六、结语 一、不说废话&…

【FastAPI】离线使用Swagger UI 或 国内网络如何快速加载Swagger UI

在FastAPI中&#xff0c;默认情况下&#xff0c;当应用启动时&#xff0c;Swagger UI 会通过在线加载 Swagger UI 的静态资源。这意味着如果应用运行在没有互联网连接的环境中&#xff0c;默认的 Swagger 文档页面将无法加载。 为了在离线环境中使用 Swagger UI&#xff0c;你…