SpringBoot 学习笔记 Part01
1. SpringBoot快速入门
SpringBoot能快速创建出生产级别的Spring应用,学习SpringBoot我们需要用到它的官方文档:
https://docs.spring.io/spring-boot/docs/current/reference/html/
SpringBoot的系统要求是 Java 8、Maven 3.3+。
接下来我们先进行maven的一些配置,在maven的settings.xml里添加阿里云镜像,能让我们更快地下载所用的包,并设置编译版本,避免一些不必要的错误。
<mirrors>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
<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>
</profiles>
入门案例需求:浏览网页时发送/hello请求,响应 Hello Spring Boot 2 !
1.1 创建maven工程,并引入依赖
导入父工程(固定写法),导入开发web场景的依赖。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
1.2 创建主程序
@SpringBootApplication:向Spring表明这是一个SpringBoot应用,启动这个main方法即可启用SpringBoot应用并开启服务器,不用再自己手动配置Tomcat了。
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class,args);
}
}
1.3 编写业务
@RestController:这是@Controller、@ResponseBody等注解的结合体,声明这是啥一个Controller类并返回值不再是个地址给地址解析器而是直接输出到页面上。具体可以观察其源码。
@RestController
public class HelloController {
@RequestMapping("hello")
public String handle01(){
return "Hello SpringBoot 2 !";
}
}
到此直接运行main方法即可开启服务器进行入门程序的测试了。
2. 简化配置
SpringBoot为我们准备了一个统一的配置文件application.properties,所有配置都可以在这里更改(tomcat、springmvc等),不更改的话都是用的SpringBoot的默认配置,在官方文档中可以查看到。
例如,我们可以修改tomcat服务器的端口号为8888。
server.port=8888
3. 简化部署
加入插件后,用maven-clean、maven-package把项目打成jar包。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
jar包在target文件夹里可以找到,可以通过cmd直接在目标服务器执行(注意,要取消cmd的快速编辑模式)。
4. 依赖管理特性
父项目做依赖管理:
导入的父项目。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
ctrl+左键 进入父项目的父项目。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
ctrl+左键 进入依赖管理。在此springboot几乎声明了所有开发中常用的依赖的版本号。
这是springboot的自动版本仲裁机制,因此我们引入依赖默认都可以不写版本,但引入非版本仲裁的jar仍需要写版本号。
若需要使用其他版本的jar包,我们也可以修改默认版本号。
- 查看spring-boot-dependencies里面规定当前依赖的版本用的标签名
- 在当前项目的pom.xml里重写配置
<properties>
<mysql.version>5.1.43</mysql.version>
</properties>
5. starter场景启动器
我们见过很多 spring-boot-starter-* ,其中 * 表示的就是某种场景,比如batch、jdbc等。只要引入starter,这个场景的所有常规需要的依赖我们都自动引入。当我们用springboot进行web开发时引入的场景启动器如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
SpringBoot所有支持的官方场景:
https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-starter
我们也可以使用第三方制作的场景启动器,比如我们见到的 *-spring-boot-starter 的命名格式,就是第三方为我们提供的简化开发的场景启动器。
所有场景启动器最底层的依赖都是基于如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.3.4.RELEASE</version>
<scope>compile</scope>
</dependency>
6. 自动配置
以上4、5点为自动配置的一些原理,现在来进一步介绍springboot的自动配置。
-
springboot为我们自动配好了tomcat。
自动为我们引入了tomcat的依赖,且自动配置好了tomcat。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <version>2.3.4.RELEASE</version> <scope>compile</scope> </dependency>
-
springboot为我们自动配好了springmvc。
自动引入SpringMVC全套组件,且自动配好了springmvc的常用功能,如:DispatcherServlet、字符编码过滤器CharacterEncodingFilter、视图解析器ViewResolver、文件上传解析器MultipartResolver。
-
springboot为我们自动配好了一些web常用的功能。
springboot为我们自动解决了一些问题,如:字符编码问题
springboot也帮我们配置好了所有web开发的常见场景,如:文件上传
我们可以通过获取IoC容器来看看springboot为我们具体准备了哪些组件。
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
String[] names = run.getBeanDefinitionNames();
for (String name : names) {
System.out.println(name);
}
}
}
6.1 默认的包结构
之前,我们需要手动进行xml配置指定需要扫描的包。而现在,主程序所在包及其下面的所有子包里面的组件都会被默认被springboot扫描进来,无需以前的扫描配置。
想要改变路径,可在**@SpringBootApplication**注解中加入属性scanBasePackages。
@SpringBootApplication(scanBasePackages="com.swz")
或者用老方法**@ComponentScan**来指定扫描路径。
@SpringBootApplication
等同于
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.swz.boot")
6.2 各种配置的默认值
springboot的统一配置文件application.properties里的各种配置都拥有默认值,如:
我们也可以对默认值进行修改。
spring.servlet.multipart.max-file-size=10MB
默认配置最终都是映射到某个类上,如:MultipartProperties。我们自己配置文件的值最终也会被绑定到每个类上,这个类会在容器中被创建对象。
6.3 springboot按需加载所有自动配置项
若我们的工程中有非常多的starter,引入了什么场景,那么这个的自动配置才会开启。Springboot所有的自动配置功能都在 spring-boot-autoconfigure这个包里。
例如,spring-boot-starter-web的父项目spring-boot-starter里就有一个spring-boot-autoconfigure包,里面都是用于自动配置的配置类(有许多报红的,是因为没有引入相关的场景,但由于springboot是按需加载的,只会使用那些我们引入且需要用到的配置类)。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/84482.html