用最简单的语言阐述最深刻的知识,纯属个人总结,有所借鉴。
Spring、SpringMVC、SpringBoot的区别
Spring是一站式框架,设计内容多,基础是AOP和IOC,Spring配置文件复杂。
SpringMVC三层架构提供了web层的全套解决方案。
SpringBoot提供默认配置及可插拔设计,方便快速开发。大多数使用默认配置并自动组装。简化开发,提高效率。
SpringBoot优点
- 内置tomcat/Jetty,可以独立运行
- 简化配置,自动装配
- 支持热部署
- 与spring生态系统集成非常容易
SpringBoot缺点
- 缺少服务注册发现等外围方案
- 缺少外围监控继承方案
- 缺少外围安全管理方案
- 缺少rest落地的URI规划方案
- 将原有的spring项目转成springboot项目比较困难,适合构建新项目
- 集成度很高,对于了解底层不容易
- 中文文档很少,某一些问题定位解决比较难
SpringBoot配置文件及加载顺序
application.properties 配置不能覆盖 bootstrap.properties 的配置。application.properties 加载顺序为:
根目录config文件夹 -- 根目录 -- 类目录config文件夹 -- 类目录 ;从高到低依次覆盖并且配置互补。
bootstrap.properties 加载优先于 application.properties 。主要适用三点
- 使用spring cloud config配置中心时,用bootstrap.properties配置文件添加连接到配置中心的属性来加载外部配置中心的配置信息
- 一些固定的不可覆盖的属性
- 一些加密/解密的场景
配置文件格式以及区别
properties和yml两种格式,区别:
- properties中以“.”分割,yml中以“:”分割
- yml中格式与json跟接近,k-v格式,并且通过“:”赋值,每个k后必有一个空格
如果将properties换成yml,一定进行mvn clean install
springBoot核心注解
启动类
@SpringBootApplication 是核心注解,是一个组合注解,主要包括以下三个注解:
- @SpringBootConfiguraiton:组件扫描,是一个组合注解(@ImportResource可以指定多个xml配置文件)
- @ComponentScan:开启组件扫描,默认扫描@SpringBootApplication所在类的同级目录以及他的子目录,注册bean实例到context中,该注解是可重复注解。以上两个注解组合起来就可以扫描 用户自定义包下面的类 。
- @EnableAutoConfiguration:启用自动装配,使项目中依赖的jar包自动配置,这个注解可以自动装配系统自带的类。
我们可以利用利用exclude将一些不需要的配置关闭:
@ImportResource 这个注解可以引入我们的xml配置文件
实体类的注解
@Entity 表明这是一个实体类,要与数据库做orm映射。需要与@Id结合使用
@Id 将该属性设置为主键
@Data 注解类;所有属性getting和 setting方法
@Getter 注解属性;提供 setting 方法
@Setter 注解属性;提供 getting 方法
@JsonIgnore 注解属性或者方法(最好是属性),json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响
控制层的注解
@RestController = @ResponseBody + @Controller
@RequestMapping @PostMapping @GetMapping 为控制器指定可以处理的URL请求
@PostMapping = @RequestMapping(method = RequestMethod.POST) Create(C)
@GetMapping = @RequestMapping(method = RequestMethod.GET) Read(R)
@PutMapping = @RequestMapping(method = RequestMethod.PUT) Update(U)
@DeleteMapping = @RequestMapping(method = RequestMethod.DELETE) Delete(D)
@RequestParam GET和POST请求传的参数会自动转换赋值到@RequestParam 所注解的变量上
@RequestBody 可以接收json数据,并转换成对应的数据类型。(不能用GET,只能用post传值)
@Valid 实现参数验证
业务处理层的注解
@Service 用于标注服务层,主要用来进行业务的逻辑处理
@Transactional 开启事务的注解
数据交互层的注解
@Repository 用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件.
定时任务的注解
启动类:@EnableScheduling
目标类:@EnableAsync
目标方法:@Scheduled
其他常用注解
@Log4j @Slf4j 这两个为日志注解
@Component 把普通pojo实例化到spring容器中
@Autowired 按类型byType装配,如要按照名称注入,则需要结合@Qualifier
@Resource 按名称byName装配,找不到与名称匹配的bean时按照类型进行装配。
@Bean 会实例化、配置并初始化一个新的对象,由Spring IOC 容器管理
SpringBoot的自动配置原理
@EnableAutoConfiguration 和 @SpringBootConfiguraiton注解。
开启springBoot特性方式
- 继承spring-boot-starter-parent项目 (pom.xml中添加,默认常用)
- 导入spring-boot-dependencies项目依赖
Spring运行方式
- 独立运行,内置了Tomcat/Jetty等容器
- 打包运行,用命令或者放在容器中
- 插件运行,maven/gradle
SpringBoot目录结构
- src/main/java 存放启动类application.java以及代码包
- src/main/resource 存放配置文件 以及 静态资源
SpringBoot 如何定义多套不同环境配置
sit开发环境,uat/test测试环境,dev预生产灰度环境,prod生产环境
SpringBoot支持的日志框架
Log4j(真正日志工具)、Slf4j(日志适配器),默认LogBack日志框架
SpringBoot读取配置文件的方式
@Value,@Environment,@PropertySource
实现热部署
Spring Loaded 和 Spring-boot-devtools
创建项目勾选devtools或者项目中在pom.xml中引入devtools依赖。
SpringBoot兼容老Spring项目
用@ImportResource注解导入项目配置文件。
如何保护springBoot应用程序
- 生产中使用HTTPS,确保应用程序间隐私和数据完整性
- 定期更新依赖,修复安全问题
SpringBoot常用的starter
- spring-boot-starter-web : 嵌入tomcat和web开发需要servlet与jsp支持
- spring-boot-starter-data-jpa : 数据库支持
- spring-boot-starter-data-redis : redis数据库支持
- spring-boot-starter-data-solr
个人学习总结,如有错误不妥之处,欢迎评论指出,共同进步