提示:这是我的个人IT资源网站,所有资源都免费,注册登录后就可以看到密码,需要什么大家尽情选取!
最近打算将SpringBoot一些核心的东西整理一遍,将分成十六个章节,相信这些知识对大家是有用的。
一、SpringBoot入门
二、SpringBoot配置
三、SpringBoot与日志
四、SpringBoot与Web开发
五、SpringBoot与Docker
六、SpringBoot与数据访问
七、SpringBoot启动配置原理
八、SpringBoot自定义starters
九、SpringBoot与缓存
十、SpringBoot与消息
十一、SpringBoot与检索
十二、SpringBoot与任务
十三、SpringBoot与安全
十四、SpringBoot与分布式
十五、SpringBoot与开发热部署
十六、SpringBoot与监控管理
四、Web开发
1、简介
使用SpringBoot;
1、创建SpringBoot应用,选中我们需要的模块;
2、SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来
3、自己编写业务代码
自动配置原理
这个场景SpringBoot帮我们配置了什么?能不能修改?能修改哪些配置?能不能扩展?
xxxxAutoConfiguration:帮我们给容器自动配置组件
xxxxProperties:配置类来封装配置文件的内容
2、SpringBoot对静态资源的映射规则
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
super.addResourceHandlers(registry);
if (!this.resourceProperties.isAddMappings()) {
logger.debug("Default resource handling disabled");
} else {
ServletContext servletContext = this.getServletContext();
this.addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/");
this.addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) -> {
registration.addResourceLocations(this.resourceProperties.getStaticLocations());
if (servletContext != null) {
registration.addResourceLocations(new Resource[]{new ServletContextResource(servletContext, "/")});
}
});
}
}
- 所有/webjars/**,都去classpath:/META-INF/resources/webjars/找资源;
webjars:以jar包的方式引入静态资源
https://www.webjars.org/
访问localhost:8080/webjars/jquery/3.3.1/jquery.js,就可以看到引入的jquery.js文件内容
<!--引入jquery-webjar-->在访问的时候只需要写webjars下面资源
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.3.1</version>
</dependency>
- "/**"访问当前项目的任何资源(静态资源的文件夹)
"classpath:/META-INF/resources/"
"classpath:/resources/"
"classpath:/static/"
"classpath:/public/"
"/":当前项目的根路径
- 欢迎页,静态资源文件夹下的所有index.html页面,被"/**"映射,localhost:8080/找index页面
- 所有的**/favicon.ico都是在静态资源文件下找
3、模版引擎
- 引入thymeleaf
JSP、Velocity、Freemarker、Thymeleaf
SpringBoot推荐的Thymeleaf;
语法更简单,功能更强大;
- Thymeleaf使用&语法
@ConfigurationProperties(
prefix = "spring.thymeleaf"
)
public class ThymeleafProperties {
private static final Charset DEFAULT_ENCODING;
public static final String DEFAULT_PREFIX = "classpath:/templates/";
public static final String DEFAULT_SUFFIX = ".html";
private boolean checkTemplate = true;
private boolean checkTemplateLocation = true;
private String prefix = "classpath:/templates/";
private String suffix = ".html";
private String mode = "HTML";
//只要我们把HTML页面放在classpath:/templates/,thymeleaf就能自动渲染
https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.pdf
点击连接可以下载thymeleaf的文档
1、导入thymeleaf的名称空间
<html lang="en" xmlns:th="http://www.thymeleaf.org">
2、使用thymeleaf的语法
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>成功!</h1>
<!--th:text 将div里面的文本内容设置为-->
<div th:text="${hello}"></div>
</body>
</html>
3、语法规则
th:text:改变当前元素里面的文本内容
th:任意html属性;来替换原生属性的值
表达式?表达式的使用可以在线或者下载文档参考使用,都有例子
@Controller
public class HelloController {
@ResponseBody
@RequestMapping("/hello")
public String hello(){
return "Hello World";
}
//查出一些数据,在页面展示
@RequestMapping("/success")
public String success(Map<String,Object> map){
//classpath:/templates/success.html
map.put("hello", "<h1>你好</h1>");
map.put("users", Arrays.asList("zhangsan","lisi","wangwu"));
return "success";
}
}
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>成功!</h1>
<!--th:text 将div里面的文本内容设置为-->
<div th:text="${hello}"></div>
<div th:utext="${hello}"></div>
<h4 th:text="${user}" th:each="user : ${users}"></h4>
<hr/>
<h4>
<span th:each="user : ${users}"> [[${user}]] </span>
</h4>
</body>
</html>
4、SpringMVC自动配置
编写一个配置类(@Configuration),是WebMvcConfigurerAdapter类型,不能标注@EnableWebMvc;
既保留了所有的自动配置,也能用我们扩展的配置
//使用WebMvcConfigurerAdapter可以来扩展SpringMVC的功能
@Configuration
public class MyMvcConfig extends WebMvcConfigurerAdapter{
@Override
public void addViewControllers(ViewControllerRegistry registry){
registry.addViewController("/atguigu").setViewName("success");
}
}
原理:
- WebMvcAutoConfiguration是SpringMVC的自动配置类
- 在做其他自动配置时会导入@Import(EnableWebMvcConfiguration.class)
- 容器中所有的WebMvcConfigurer都会一起起作用
- 我们的配置类也会被调用
效果:SpringMVC的自动配置和我们的扩展配置都会起作用
全面接管SpringMVC
SpringBoot对SpringMVC的自动配置不需要了,所有都是我们自己配置,所有的SpringMVC的自动配置都失效了
我们需要在配置类中添加@EnableWebMvc即可
//使用WebMvcConfigurerAdapter可以来扩展SpringMVC的功能
@EnableWebMvc
@Configuration
public class MyMvcConfig extends WebMvcConfigurerAdapter{
@Override
public void addViewControllers(ViewControllerRegistry registry){
registry.addViewController("/atguigu").setViewName("success");
}
}
原理:
为什么@EnableWebMvc自动配置就失效了
- @EnableWebMvc的核心
@Import(DelegatingWebMvcConfiguration.class) public @interface EnableWebMvc{
- 导入的DelegatingWebMvcConfiguration继承WebMvcConfigurationSupport
@Configuration public class DelegatingWebMvcConfiguration extends WebMvcConfigurationSupport{
- WebMvc自动配置判断容器中没有这个组件的时候,这个自动配置类才生效
@Configuration @ConditionalOnWebApplication @ConditionalOnClass({Servlet.class,DispatcherServlet.class,WebMvcConfigurerAdapter.class}) //容器中没有这个组件的时候,这个自动配置类才生效 @ConditionalOnMissingBean(WebMvcConfigurationSupport.class) @AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10) @AutoConfigureAfter({DispatcherServletAutoConfiguration.class,ValidationAutoConfiguration.class}) public class WebMvcAutoConfiguration{
5、如何修改SpringBoot的默认配置
模式:
- SpringBoot在自动配置很多组件的时候,先看容器中有没有用户自己配置的(@Bean、@Component)如果有就用用户配置的,如果没有,才自动配置;如果有些组件可以有多个(ViewResolver)将用户配置和自己默认的组合起来
- 在SpringBoot中会有非常多的xxxxConfigurer帮助我们进行扩展配置