文章目录
什么叫杂记?就是很杂很乱,没有什么逻辑性,目的就是解决一个一个的小问题。所以一定要看一级标题,一级标题是什么就说明当前在聊什么。
另外,本节内容是对JavaEE专栏Day26—Day29的总结
1.快速入门
创建工程
导入spring boot相关的依赖
<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>
编写主程序类
@SpringBootApplication
public class HelloWorldMainApplication {
public static void main(String[] args) {
SpringApplication.run(HelloWorldMainApplication.class,args);
}
}
编写相关的Controller
@Controller
public class HelloController {
@ResponseBody
@RequestMapping("/hello")
public String hello(){
return "Hello World!";
}
}
运行测试
略
1.如何使用Spring Initailizr神器?
Spring Initailizr
帮我们快速的创建出咱们的Spring Boot应用
1.如何jar包部署SpringBoot项目
1.如何配置yaml语法提示?
1.如何查看依赖树
1.如何使用lombok
@Getter:自动提供getter方法
@Setter:自动提供setter方法
@ToString:生成toString方法
@EqualsAndHashCode生成JavaBean的equals和hashCode这俩方法。
@Data :自动提供getter和setter、hashCode、equals、toString等方法
@Slf4j:自动在bean中提供log变量,其实用的是slf4j的日志功能。
@AllArgsConstructor:生成有参构造器
@NoArgsConstructor注解生成无参构造器的。
1.如何使用devtools开发者工具
devtools
开发者工具的作用就是我们通常所说的热更新。只需要按下Ctrl + F9
快捷键,我们的项目就能实时生效了
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
1.静态资源的访问
访问 : 当前项目根路径/ + 静态资源名
1.欢迎页index.html的存放位置
1.常用的注解
@ResponseBody
@RestController
SpringBootApplication
@Configuration与@Bean
@Configuration(proxyBeanMethods = true)
@Configuration(proxyBeanMethods = true),我们知道配置类本身也是组件,从IDEA控制台打印出的结果中我们还能知道它并不是一个普通对象,而是一个被Spring CGLIB增强了的代理对象,我们获取到的配置类组件本身就是一个代理对象。当我们在外部通过该代理对象来调用其方法时,Spring Boot默认会检查容器中是否有该方法已经返回了的组件,若有则不会新创,而是直接拿;若没有则再来调用该方法创建一个新的,总之,Spring Boot总会检查方法返回的组件是否在容器中存在。当然了,这一切的前提是@Configuration注解里面的proxyBeanMethods属性的值为true(@Configuration(proxyBeanMethods = true)),即在配置类中的方法被代理的情况下(proxyBeanMethods翻译过来就是代理bean的方法嘛),我们才能看到上述这种现象。
@Component、@Controller、@Service、@Repository
- 我们说了一下使用@Configuration注解结合@Bean注解来向容器中注册组件。
- 我们还可以给类上标注一个@Component注解,以代表该类是一个组件;
- 或者标注一个@Controller注解,以代表它是前端控制器组件;
- 或者标注一个@Service注解,以代表它是service层组件;
- 或者标注一个@Repository注解,代表它是Dao层组件
@Import
我们说了一下使用@Configuration注解结合@Bean注解来向容器中注册组件。接下来,介绍另外一种给容器中添加组件的方式,即使用@Import注解给容器中导入一个组件。
@Import注解应该写在哪儿呢?我们只要写在任何一个配置类或者组件里面都是可行的。注意,@Import注解要写在容器中的组件它所属类型的那个类上,这个类可以是配置类,也可以是其他注解(例如@Component、@Controller、@Service以及@Repository)标注的类,总之,只要是容器中组件所属类型的类都行。这里,我们不妨将其标注在MyConfig配置类上。
@Conditional
@Conditional满足Conditional指定的条件,则进行组件注入
@ImportResource
@ConfigurationProperties
@EnableConfigurationProperties
@ConfigurationProperties的作用仅仅是配置绑定,你还需要用@Component注解或者@EnableConfigurationProperties注入容器
1.SpringBoot的请求处理?
1.Rest风格的请求
2.普通参数与基本注解
@PathVariable
@RequestHeader
@RequestParam
@CookieValue
@RequestBody
RequestAttribute
3.矩阵变量
详情请见Day29_SpringBoot—请求处理、响应处理
4.复杂参数:
①Map、②Model(map、model里面的数据会被放在request的请求域 request.setAttribute)、
③RedirectAttributes( 重定向携带数据)、
④ServletResponse(response)
5.自定义参数
1.SpringBoot的响应处理?
1.响应json数据
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
当你引入web场景自动引入了json场景,所以你就不用配置json了,给前端自动返回json数据;
2.响应文件数据
2.内容协商功能
根据客户端接收能力不同,返回不同媒体类型的数据。浏览器说我能接收json数据,那么返回json数据;另一个客户端说我能接收xml数据,那么返回xml数据;还有一个客户端说我能接收所有类型的数据,那么就返回它优先想要的数据类型。
1.服务端得导入支持相关类型数据的jar包
服务端要返回xml数据那肯定得支持xml数据才能行。(json不用你导入,你引入web场景自动引入了json场景)
先引入xml依赖
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</dependency>
2.测试
3.开启浏览器协商
如果想让浏览器接收json数据,你发送的url可以是http://localhost:8080/test/person?format=json
;
如果想让浏览器接收xml数据,你发送的url可以是http://localhost:8080/test/person?format=xml
但是你还得在application.yaml里面添加开启基于请求参数的内容协商功能。
spring:
contentnegotiation:
favor-parameter: true #开启请求参数内容协商模式
1.如何整合SpringBoot单元测试?
1.导入依赖
2.古今对比
3.单元测试
官方文档:JUnit5常用注解
4.断言机制
简单断言
数组断言: 通过 assertArrayEquals 方法来判断两个对象或原始类型的数组是否相等
组合断言: assertAll 方法接受多个 lambda 表达式提供的断言
异常断言: Assertions.assertThrows() 配合函数式编程就可以进行使用。断定一定会出现异常。
超时异常
快速失败
5.前置条件
前置条件(assumptions【假设】)类似于断言,不同之处在于 不满足的断言会使得测试方法失败 ,
而不满足的前置条件 只会使得测试方法的执行终止。前置条件可以看成是 测试方法执行的前提,当该前提不满足时,就没有继续执行的必要。
6.测试报告
7.嵌套测试
8.参数化测试(重点)
参数化测试就可以把所有参数都拉进来挨个测试一遍
- @ParameterizedTest代表当前测试的内容不是普通的测试,而是参数化测试
- @ValueSource: 为参数化测试指定入参来源,支持八大基础类以及String类型,Class类型
- @MethodSource:表示读取指定方法的返回值作为参数化测试入参(注意方法返回需要是一个流)
- …太多了
总之吧,如果需要就从官方文档(参数化测试)里面学,如果不需要你学那么多也没有用