本帖最后由 余大麻 于 2019-8-1 14:40 编辑
1. SpringBoot 入门A. SpringBoot 简介- SpringBoot 是 2014 年伴随 Spring4.0 开发出来的一个框架
- SpringBoot 可以帮助我们简单快捷的进行产品级别的开发
- SpringBoot 核心思想:【约定大于配置】
- SpringBoot 帮我们自动配置好与其他框架的整合与相关环境的兼容
- 使用嵌入式的 Servlet 容器,应用无需打包成 war
- SpringBoot 缺点:入门容易,精通难
B. 微服务- 2014 年 martin fowler 提出的一种架构风格
- 一个应用应该是一组小型服务,可以通过 http 的方式进行交互
- 每一个功能元素都是一个可独立替换和独立升级的软件单元
- 但是这样子导致部署和运维比较复杂
B. maven 配置- 给maven 的 settings.xml 配置文件的 profiles 标签添加
[XML] 纯文本查看 复制代码 <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>
C. HelloWorld 入门案例- 浏览器发送hello请求,服务器接受请求并处理,响应Hello World字符串
- 创建一个 jar 的 maven 工程
- pom 文件加入依赖
[XML] 纯文本查看 复制代码 <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
编写一个主程序;启动Spring Boot应用 [Java] 纯文本查看 复制代码 package com.study.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用
*/
@SpringBootApplication
public class HelloWorldMainApp {
public static void main(String[] args) {
// 把 SpringBoot 启动起来
SpringApplication.run(HelloWorldMainApp.class,args);
}
}
编写 Controller [Java] 纯文本查看 复制代码 package com.study.springboot.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "HelloWorld!";
}
}
- 测试
- 简化部署
- 打包之后使用: java -jar Xxxx.jar 即可运行
- 自带 tomcat 环境
[XML] 纯文本查看 复制代码 <!-- 这个插件,可以将应用打包成一个可执行的jar包;-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
D. HelloWorld 案例研究- 父项目
- 所有 SpringBoot starter 的父项目
- 做依赖管理
- SpringBoot 的版本控制中心,所有的版本都写好的
- 如果没有在 dependences 中管理的依赖要自己手动指定版本
[XML] 纯文本查看 复制代码 <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<!-- 父项目的父项目 -->
<!-- 它来真正管理Spring Boot应用里面的所有依赖版本 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath>../../spring-boot-dependencies</relativePath>
</parent>
导入依赖 - spring-boot-starter
- web
- Spring Boot将所有的功能场景都抽取出来,做成一个个的starters(启动器)
- 只需要在项目里面引入这些starter相关场景的所有依赖都会导入进来
- 要用什么功能就导入什么场景的启动器
[XML] 纯文本查看 复制代码 <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
E. SpringBoot 的主程序类细节- @SpringBootApplication: SpringBoot 的主程序类
- SpringBoot 应用标注在某个类上说明这个类是 SpringBoot 的主配置类
- SpringBoot 就应该运行这个类的 main 方法来启动 SpringBoot 应用
[Java] 纯文本查看 复制代码 @Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
.....
}
- @SpringBootConfiguration: 表示该类是一个配置类
- 表示这个类是一个配置类
- @Configuration: Spring 最底层的注解
- 配置类下配置这个注解
- 相当于配置文件
- @Component: 配置类也是 Spring 的一个组件
- @EnableAutoConfiguration: =加载配置项
- @AutoConfigurationPackage: 自动配置包
- @Import(AutoConfigurationPackages.Registrar.class): Spring 底层注解
- 导入我们主程序下的配置
- @Import(EnableAutoConfigurationImportSelector.class): 导入哪些组件的选择器
- 将所有需要导入的组件以全类名的方式返回, 这些组件就会添加到容器中
- 导入自动配置类
- 有了自动配置类,免去了我们手动编写配置注入功能组件等的工作
- 从类路径下获取 META-INF/spring.factories 中 EnableAutoConfiguration指定的值
2. 使用 Spring Initializer 快速创建 Spring Boot 项目- 根据提示就可以快速创建一个 SpringBoot 项目
A. 默认 SpringBoot 的项目结构[XML] 纯文本查看 复制代码 resources
|___> satic : 保存所有的静态资源
|___> templates: 保存所有的模板页面(默认是jar包,使用嵌入tomcat,默认是不支持 jsp 的,可以使用模板引擎)
|___> application.properties : 应用的配置文件
B. 配置文件- SpringBoot 有 2 种配置文件(配置文件名是固定的)
- application.properties
- application.yml
- 表示字面量
- k: v:字面直接来写
- "":双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
- '':单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
- 对象
- k: v:在下一行来写对象的属性和值的关系;注意缩进
- 对象还是k: v的方式
[XML] 纯文本查看 复制代码 friends:
lastName: zhangsan
age: 20
[XML] 纯文本查看 复制代码 friends: {lastName:"zhagnsan", age: 23}
数组 [XML] 纯文本查看 复制代码 pets:
- cat[mw_shl_code=java,true]@NoArgsConstructor
@ToString
@Data
public class Dog {
private String name;
private Integer age;
}
@NoArgsConstructor
@ToString
@Data
public class Person {
private String lastName;
private Integer age;
private Boolean boss;
private Date birthday;
private Map<Object, Object> maps;
private List<Object> lists;
private Dog dog;
}
- pig
- dog[/mw_shl_code]
[XHTML] 纯文本查看 复制代码 pets: ["cat", "dog", "pig"]
C. 取值
[Java] 纯文本查看 复制代码 @NoArgsConstructor
@ToString
@Data
public class Dog {
private String name;
private Integer age;
}
[Java] 纯文本查看 复制代码 @NoArgsConstructor
@ToString
@Data
public class Person {
private String lastName;
private Integer age;
private Boolean boss;
private Date birthday;
private Map<Object, Object> maps;
private List<Object> lists;
private Dog dog;
}
. properties 配置文件的编码问题- properties 的写法和 yml 的写法相似
- 配置文件中如果值为中文时会出现乱码
- idea 默认使用 utf-8 进行编码的
- 把文件的编码设置成 utf-8
|