本系列帖子为鼠鼠复习八股巩固记忆和个人理解所写,如有错误纯属本人实力不佳,欢迎各位大佬阅读指正
1.SpringBoot对比Spring优势?
Spring是一套核心框架,做IOC、AOP,SpringBoot不是替代Spring,是基于Spring的快速开发脚手架,底层依然使用Spring核心。
SpringBoot优势:
自动配置,告别繁琐XML配置
原生Spring需要大量xml配置,手动配置Bean、数据库、MVC等,SpringBoot通过条件注解@Conditional实现自动装配,根据项目依赖自动创建Bean、几乎零xml,减少样板配置代码。
起步依赖简化依赖管理
Spring需要自己管理一大堆jar包,手动控制版本,容易出现版本冲突,SpringBoot提供起步依赖(starter)启动器,例如spring-boot-starter-web,引入一个starter自动导入一套配套版本依赖,版本由Boot父工程统一管控,解决版本冲突。
内置Web服务器
Spring开发web项目,需要外部单独部署Tomcat,打包放到容器,SpringBoot内置Tomcat,默认打jar包,java-jar直接运行,不需要额外web容器,部署简单。
嵌入式容器,独立应用
项目打成jar包即可直接启动,不依赖外部容器,运维部署简单,非常适合微服务。
自带监控,健康检查
引入actuator可以暴露接口,查看应用运行状态,Bean信息、内存、日志等,Spring原生需要自己整合第三方组件。
简化项目搭建
Spring Initializr快速生成项目骨架,不用手动搭建目录结构。
缺点:
自动配置黑盒,底层封装较重,遇到自动装配异常,排查问题难度比原生Spring高。
2.SpringBoot用到哪些设计模式?
单例模式Singleton:
整个容器只创建一个Bean实例,减少对象创建开销,复用对象。
工厂模式Factory:
简单工厂,Spring最顶层工厂接口,根据BeanName获取Bean对象。
抽象工厂,继承BeanFactory,扩展更多能力。
封装对象创建,使用者不用new,交给容器创建管理Bean。
代理模式Proxy(AOP核心):
不修改目标类源码,对方法做增强,实现日志、事务、权限。
适配器模式Adapter:
适配不同Handler,统一执行Controller,多种参数解析器,消息转换器也体现适配器。
装饰器模式Decorator:
在不改变原有对象基础上,动态增强对象功能。
模板方法模式Template Method:
定义一套固定执行流程,可变逻辑交给子类实现,简化重复模板代码。
策略模式Strategy:
同一套行为有多种实现,运行时选中对应策略执行。
建造者模式Builder:
分布构建复杂对象,把对象构造和属性赋值分离。
观察者模式Observer:
事件发布,和事件监听解耦,比如项目启动完成事件。