SpringBoot-尚硅谷笔记
一、hello world
目的:简化spring开发
技术栈:spring全家桶
J2EE一站式解决方案
优点:
- 与主流框架集成
- 嵌入tomcat,直接生成jar包
- starters启动器,自动配置依赖和版本管理
- 无需xml,开箱即用
- 提供准生产环境的应用监控
- 与云计算集成
发展过程:
- 单体应用:所有的都写在一个应用里,牵一发动全身
- 微服务:独立功能元素,动态组合,节省资源,服务耦合降低
课程学习:谷粒学院、博学谷
知识前提:
- Spring框架掌握
- Maven掌握
- IDEA掌握
环境约束:
- jdk1.8
- maven3.x
- IDEA2017以上
- springboot 1.5.9 release
配置
maven添加配置
<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>
<maven.compiler.encoding>utf-8</maven.compiler.encoding>
</properties>
</profile>
IDEA配置
配置默认maven为指定maven
hello world
需求:浏览器发送hello请求,服务器返回处理结果
1.创建普通maven工程,无骨架
2.添加maven依赖
包括父工程依赖和springweb依赖,此处打包为jar
<!-- Inherit defaults from Spring Boot -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
</parent>
<!-- Add typical dependencies for a web application -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<!-- Package as an executable jar -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
3.编写主程序
要掌握的注解:
@SpringBootApplication
。标志这是一个Springboot的应用,此时注解在主函数类外
main方法中:
SpringApplication.run(main类字节码文件,args)
4.编写controller文件
要掌握的注解:
@Controller
。表示这个类为控制类,映射请求
要掌握的注解:
@RequestMapping
。表示这个方法所映射的请求
要掌握的注解:
@ResponseBody
。表示这个方法会返回一个值给response
细代码可以参考springboot环境配置日志
5.看效果
可以直接工程中点击运行查看,然后去浏览器访问查看效果,也可以maven package打包成jar,然后:
java -jar xxx
然后浏览器访问即可
细节一二
- RESTAPI解释
服务器请求,处理后不是跳转页面,而是返回内容
如果某个controller类的所有mapping方法都是返回一个内容(字符串或者json),那么可以将@ResponseBody
加到类上面。
要掌握的注解:
@RestController
。这个为:@ResponseBody
+@Controller
使用spring initializer快速生成springboot项目
生成项目的目录结构:
- 主程序已经生成好
- resources文件夹:
- static:保存静态资源:js css images
- templates:存放模板引擎,默认jar包使用嵌入式tomcat,不支持jsp页面
- application.properties:springboot应用配置文件,用来改变默认配置
二、springboot配置
配置文件
- applicatin.properties
- application.yml
用来改变springboot默认配置,路径:src/main/resource
或者类路径/config
yml配置实例:
server:
port: 8081
yml语法
基本语法
key: value
注意:key和value之间严格【空格】约定!同一缩进下的kv属于同一层级
不能是tab,只能是空格
注意事项:
- 属性值中单引号中可以转义,双引号不会转移,字符串默认不用加引号
- 对象表示可以用行内写法:friends: {lastname: ddd,age: 18}
- 数组使用
横杠空格
表示元素#普通写法 pets: - cat - dog - pig #行内写法 pets: [cat,dog,pig]
配置文件注入javabean
配置文件内容:
person:
name: abc
age: 18
dog:
name: gaga
age: 2
lists:
- abc
- gaga
其中,person下的第一个层级都与javabean中的属性一一对应。
在Person类中,需要加上注解:@Component
和@ConfigurationProperties(prefix="person")
要掌握的注解:
@ConfigurationProperties(prefix="person")
。用于将配置文件内的对应属性映射到javabean上,其中prefix表示选定的配置文件字段,默认从全局配置文件中获取值
要掌握的注解:
@PropertySource(...)
。用于指定配置文件路径,可以指定多个,当需要获取其他文件里的配置需要加该注解
要掌握的注解::
@Component
。该注解将当前类加入容器管理,标识为spring的组件,这样才能使用第六个注解的功能
注意事项:
- 使用上面的注解后会提示导入配置文件注解处理器包:
<!--导入配置文件处理器后,配置文件中写绑定信息会有提示-->
验证注入情况
采用spring的测试类来查看注入情况
在test-java-包下有个测试类,包含两个注解:@RunWith(SpringRunner.class)
和@SpringBootTest
,在测试类中写上Person person;
并注解:@Autowired
,然后定义一个方法输出该字段,并给该方法注解@Test
要掌握的注解:
@RunWith(SpringRunner.class)
。表示当前测试类使用的测试驱动器为springrunner,当然也可以指定为junit等
要掌握的注解:
@SpringBootTest
。表示当前类为springboot的测试类
要掌握的注解:
@Autowired
。表示当前类字段自动从spring容器中注入匹配的javabean
要掌握的注解:
@Test
。表示当前方法为需要测试的方法,必须注解在测试类中
properties语法
直接看:
#由于idea默认properties使用utf-8编码,
#而程序运行时默认采用ascii编码,
#所以输出中文会乱码,在idea的file encoding中设置运行时转码为ascii
person.last-name=abc
person.age=18
person.dog.name=gaga
person.dog.age=1
person.maps.k1=v1
person.map.k2=v2
要掌握的注解:
@Value("${person.last-name})
。该注解放在javabean类中的属性上,表示从spring容器中取出哪个值注入到当前属性中,value中也支持el表达式:@Value("#{11*2})
会将22注入
注意:@ConfigurationProperties和@Value
- 松散绑定:
只用configurationproperties支持松散绑定
- spel语法:只有Value支持,毕竟另一个是统一注入的
- jsr303校验:ConfigurationProperties支持,如类上加:
@Validated
,字段上加:@Email
,则当前字段必须为邮箱格式,Value不支持 - Value注解在复杂类型封装时不支持,只能注入基本数据类型