springboot学习笔记
记住一句话:约定大于配置
第一个SpringBoot程序
- jdk1.8
- maven 3.6.1
- springboot:最新版
- IDEA
可以在官网直接下载后,导入idea开发(https://start.spring.io/)
直接使用idea创建一个springboot项目(一般开发直接在idea中创建)
原理初探
自动配置:
pom.xml
- spring-boot-dependencies:核心依赖在父工程中!
- 我们在写或者引入一些SpringBoot依赖的时候,不需要指定版本,就因为有这些版本仓库
启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
- 启动器:说白了就是springboot的启动场景
- 比如spring-boot-starter-web,它就会帮我们自动导入web环境所有的依赖!
- springboot会将所有的功能场景,都变成一个个的启动器
- 我们要使用什么功能,就只需要找到对应的启动器就可以了
starter
主程序
//@SpringBootApplication:标注这个类是一个springboot的应用
@SpringBootApplication
public class Springboot01HelloworldApplication {
public static void main(String[] args) {
//将springboot应用启动
SpringApplication.run(Springboot01HelloworldApplication.class, args);
}
}
-
注解
-
@SpringBootConfiguration:springboot的配置 @Configuration:spring配置类 @Component:说明这也是一个spring组件 @EnableAutoConfiguration:自动配置 @AutoConfigurationPackage:自动配置包 @Import({Registrar.class}):自动配置`包注册` @Import({AutoConfigurationImportSelector.class}):自动配置导入选择 //获取所有的配置 List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);
-
获取候选的配置
protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.");
return configurations;
}
META-INF/spring.factories:自动配置的核心文件
结论:springboot所有自动配置都是在启动的时候扫描并加载:spring.factories所有的自动配置类都在这里面,但是不一定生效,要判断条件是否成立,只要导入了对应的start,就有对应的启动器了,有了启动器,我们自动装配就会生效,然后就配置成功!
1.springboot在启动的时候,从类路径下/META-INF/spring.factories获取指定的值;
2.将这些自动配置的类导入容器,自动配置就会生效,帮我们进行自动配置!
3.以前我们需要自动配置的东西,现在springboot帮我们做了!
4.整合javaEE,解决方案和自动配置的东西都在spring-boot-autoconfigure-2.2.0.RELEASE.jar这个包下
5.它会把所有需要导入的组件,以类名的方式返回,这些组件就会被添加到容器;
6.容器中也会存在非常多的xxxAutoConfiguration的文件(@Bean),就是这些类给容器中导入了这个场景需要的所有组件;并自动配置,@Configuration,javaConfig!
7.有了自动配置类,免去了我们手动编写配置文件的工作!
JavaConfig @Configuration @Bean
Docker:进程
SpringBoot配置
yaml可以直接给实体类赋值
JSR303校验
springboot的多环境配置:可以选择激活哪一个配置文件
spring.profiles.active=test
SpringBoot Web 开发
jar:webapp!
自动装配
- xxxxAutoConfiguration 向容器中自动配置组件
- xxxxProperties:自动配置类,装配配置文件中自定义的一些内容!
要解决的问题:
- 导入静态资源…
- 首页
- jsp,模板引擎Thymeleaf
- 装配扩展SpringMVC
- 增删改查
- 拦截器
- 国际化!
静态资源
总结:
- 在springboot,我们可以使用一下方式处理静态资源
- webjars localhost:8080/webjars/
- public,static,/**,resources localhost:8080/
- 优先级:resources>static(默认)>public
首页如何定制
模板引擎
结论:只要需要使用thymeleaf,只需要导入对应的依赖就可以了!我们将html页面放在我们的templates目录下即可!
在springboot中,有非常多的xxxx Configuration帮助我们进行扩展配置,只要看见了这个东西,我们就要注意了!
- 首页配置:
- 注意点,所有页面的静态资源都需要使用thymeleaf接管;
- url:@{}
- 页面国际化:
- 我们需要配置i18n文件
- 我们如果需要在项目中进行按钮自动切换,我们需要自定义一个组件LocalResolver
- 记得将自己写的组件配置到spring容器
@Bean
- #{}
- 登录+拦截器
- 员工列表展示
- 提取公共页面
th:fragment="sidebar"
<div th:replace="~{commons/commons::sidebar(active='main.html')}"></div>
- 如果要传递参数,可以直接使用()传参,接收判断即可
- 列表循环展示
- 提取公共页面
- 添加员工
- 按钮提交
- 跳转到添加页面
- 添加员工成功
- 返回首页
- CRUD搞定
- 404
前端:
- 模板:别人写好的,我们拿来改成自己的
- 框架:组件:自己动手组合拼接! Bootstrap ,Layui,semantic-ui
- 栅格系统
- 导航栏
- 侧边栏
- 表单
- 前端搞定:页面长什么样子:数据
- 设计数据库(数据库设计难点!)
- 前端让他能够自动运行,独立化工程
- 数据接口如何对接:json,对象all in one!
- 前后端联调测试!
SpringSecurity(安全)
在web开发中,安全第一位! 过滤器,拦截器~
功能性需求:否
做网站:安全应该在什么时候考虑
- 漏洞,隐私泄露~
- 架构一旦确定~
shiro、SpringSecurity:很想~除了类不一样,名字不一样;
认证,授权(vip1,vip2,vip3)
- 功能权限
- 访问权限
- 菜单权限
- 拦截器,过滤器:大量的原生代码~冗余