SpringBoot学习

Ray Wang 2020-10-05 07:09:28
Spring Boot 基础篇
1.1Spring Boot 简介
Spring Boot 是所有基于 Spring 开发的项目的起点。SpringBoot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像maven整合了所有的jar包,spring boot整合了很多的技术,提供 了JavaEE的大整合。

1.1.1springboot的学习铺垫和要求
1.对spring的IOC有深入的理解,springboot是基于spring的。
2.深入掌握spring的注解开发。传统老程序员对注解认识偏少。
3.最好有ssm项目的开发经验,因为springboot是整合了javaEE的技术。
4.有较好的源码学习经验。
5.有idea和eclipse的使用经验,本次课程使用idea。
6.在国内IT公司是一个主要的招聘要求。


1.1.2、SpringBoot主要特性
spring官方的网站:https://spring.io/

1、SpringBoot Starter:他将常用的依赖分组进行了整合,将其合并到一个依赖中,这样就可以一次性添加到项目的Maven或Gradle构建中;

2、使编码变得简单,SpringBoot采用 JavaConfig的方式对Spring进行配置,并且提供了大量的注解,极大的提高了工作效率。

3、自动配置:SpringBoot的自动配置特性利用了Spring对条件化配置的支持,合理地推测应用所需的bean并自动化配置他们;

4、使部署变得简单,SpringBoot内置了三种Servlet容器,Tomcat,Jetty,undertow.我们只需要一个Java的运行环境就可以跑SpringBoot的项目了,SpringBoot的项目可以打成一个jar包。

5、现在流行微服务与分布式系统,springboot就是一个非常好的微服务开发框架,你可以使用它快速的搭建起一个系统。同时,你也可以使用spring cloud(Spring Cloud是一个基于Spring Boot实现的云应用开发工具)来搭建一个分布式的架构。



1.1.3springboot缺点
1.将现有或传统的Spring Framework项目转换为Spring Boot应用程序是一个非常困难和耗时的过程。它仅适用于全新Spring项目。
2.使用简单,学习成本高,精通难。

1.2环境准备

jdk1.8:Spring Boot 推荐jdk1.8及以上;
maven3.x:maven 3.3以上版本;
IntelliJIDEA2019,不要使用2017
SpringBoot 2.3.0.RELEASE


Day 1
1.2.1MAVEN设置
1.配置阿里云镜像
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
2.给maven 的settings.xml配置文件的profiles标签添加
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
1.2.2IDEA设置
1.指定jdk环境


2.指定maven环境


1.3Spring Boot HelloWorld
1.3.1创建一个maven父工程tx_sboot(pom)

pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>cn.tx.springboot</groupId>
<artifactId>tx_sboot</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>


<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.0.RELEASE</version>
</parent>


<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>



1.3.2在父工程下创建springboot-first(jar)

1.3.3创建测试Controller
@RestController
public class TestController {

@RequestMapping("hello")
public String hello(){
return "hello";
}
}
1.3.4创建一个springboot启动类
@SpringBootApplication
public class FirstSpringApplication {

public static void main(String[] args) {
SpringApplication.run(FirstSpringApplication.class, args);
}
}

启动并且测试:http://localhost:8080/hello
成功。
1.3.5在父工程tx_sboot中加入构建依赖
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

我们可以把springboot工程打成可执行的jar
mvn -f springboot-first clean package
打完jar包后,我们切入到对应的jar包里面执行


1.3.6第一个例子做完的疑问。
1.starter是什么?我们何如去使用这些starter?
2.Tomcat的内嵌是如何完成
3.使用了web对应的starter,springmvc是如何自动装配?
4.我们如何来配置我们自定义话的相关内容。
1.4 默认扫描器basepackage
springboot的主启动类所在的package就是扫描器的basepackage
如图所示com.example.myapplication就是我们的扫描器中basepackge
com
+- example
+- myapplication
+- Application.java
|
+- customer
| +- Customer.java
| +- CustomerController.java
| +- CustomerService.java
| +- CustomerRepository.java
|
+- order
+- Order.java
+- OrderController.java
+- OrderService.java
+- OrderRepository.java


源码解析

@AutoConfigurationPackage
自动配置包负责basepackge的注册
@AutoConfigurationPackage内部使用@Import来做bean的定义的注册

让我们进入AutoConfigurationPackages.Registrar,通过register的调用来注册basepackage的bean定义的

进入到PackageImports,获得basepackge设置给packageNames

回到上一层进入到register,创建bean的定义并且把packageNames设置给bean定义
然后把bean定义的做注册。

1.5 自动配置浅析
springboot扫描当前classpath下所有的jar包,筛选出来EnableAutoConfiguration下的所有自动配置类注入到spring容器中,完成自动的bean的配置。


2热部署
在实际开发过程中,每次修改代码就得将项目重启,重新部署,对于一些大型应用来说,重启时间需要花费大量的时间成本。对于一个后端开发者来说,重启过程确实很难受啊。在 Java 开发领域,热部署一直是一个难以解决的问题,目前的 Java 虚拟机只能实现方法体的修改热部署,对于整个类的结构修改,仍然需要重启虚拟机,对类重新加载才能完成更新操作。下面我们就看看对于简单的类修改的热部署怎么实现。
2.1原理
深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。
2.2devtools工具包

devtools会监听classpath下的文件变动,并且会立即重启应用(发生在保存时机),
java类文件热部署(类文件修改后不会立即生效),实现对属性文件的热部署。
devtools可以实现页面热部署(页面修改后会立即生效,这个可以直接在application.properties文件中配置spring.thymeleaf.cache=false来实现,后面讲到)。

2.3idea的工具设置
当我们修改了类文件后,idea不会自动编译,需要通过ctrl+F9来触发,
如果想要自动生效得修改idea设置,该功能按着个人的喜好来设置,修改类后,当我们窗口切换时候可以看到热部署的发生

(1)File-Settings-Compiler-Build Project automatically
(2)ctrl + shift + alt + / ,选择Registry,勾上 Compiler autoMake allow when app running




2.4 热部署的排除
默认情况下,/META-INF/maven,/META-INF/resources,/resources,/static,/templates,/public这些文件夹下的文件修改不会使应用重启,但是会重新加载(devtools内嵌了一个LiveReload server,当资源发生改变时,浏览器刷新)。

1.我们在resources/static目录下创建tx.js文件每次发生修改后的并不重启,而是采用livereload的方式。
2.同时我们可以根据自己的意愿来设置想要排除的资源

spring.devtools.restart.exclude=static/**,public/**

后续会更新...
...全文
97 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧