Spring全家桶

常用的spring框架

名称描述
SpringFramework即使我们常说的spring框架,包含IOC、context上下文、bean管理、springmvc等众多的功能模块
Springboot依赖spring框架,目标是简化应用的创建、开发和部署,简化了配置文件,使用嵌入式web服务。核心思想是“约定大于配置”,只需要很少的配置就可以,简化了开发模式
springdata是一个操作和访问数据的工具集,提供了对多种数据源的操作能力,jdbc、mongdb、redis等
springcloud是一个微服务的解决方案,是一系列不同的开箱即用的微服务框架的集合,基于springboot,简化了分布式系统的开发,集成了服务发现、配置管理、消息总线、负载均衡、断路器、服务监控等各种服务治理能力

spring中的基本概念

在这里插入图片描述

IOC

我们拿公司中的招聘来举例,假如一个公司有产品、研发、测试,如果公司是跟据岗位要求来安排人员,就是上图的↓,就是正向流程
如果反过来,不用公司来安排人选,由第三方猎头来匹配和安排人员,如上图的↑,这就是控制反正
在spring中,对象的属性是由对象自己创建的,就是正向流程,如果对象的属性不是自己创建而是由容器创建的,这就是控制反转。上图中的DI(依赖注入)是实现控制反转的一种方式,正向流程导致了对象与对象之间的高耦合,IOC可以解决高耦合的问题,有利于功能的复用,能使程序结构变的非常灵活。

IOC实现时的两个概念

在这里插入图片描述
Context和Bean是spring中IOC实现的两个概念,所有被spring管理的、创建的用于依赖注入的对象就叫一个bean,spring创建并完成依赖注入后所有的bean统一放在一个叫做context的上下文中进行管理。

AOP

在这里插入图片描述
一般我们的程序是从controller调用Service层,然后Service层再调用Dao层来返回数据,最后再逐层返回结果,这是一个途中向↓指示的按执行顺序的纵向处理。
但是我们思考这样的问题:一个系统中有多个不同的服务,如用户服务、商品信息服务等等,每个服务的controller层都需要验证参数,都需要处理异常,如果按图中绿色部分对不同服务中相同功能进行横切,例如身份验证、参数验证、异常处理等,这就不需要在不同服务中都写相同的逻辑了,这就是AOP思想所解决的问题。
AOP以功能进行划分,对不同顺序服务中的不同位置进行横切,完成个服务共同需要实现的部分。

spring框架组件

在这里插入图片描述
上图是4.0版本的,在5.0中portlet已经废弃,同时增加了用于web异步响应的WebFlux。我们面试不需要对所有组件进行了解,只需要对途中红色框里的了解就行。

组件名描述
core是所有组件的核心
Beans、context实现IOC/DI的基础
AOP用来实现面向切面编程
Web包括了springMvc,是web服务的控制层实现

机制与实现

AOP

是通过代理实现在执行对象的某个方法是执行插入的切面逻辑,实现的方式有动态代理,也叫运行时增强,比如jdk代理、cglib代理;还有静态代理,在编译时进行代理,比如ApectJ。
对于AOP还需要了解下@Aspect、@Advice等注解的使用。

PlaceHolder动态置换

主要需要了解替换发生的时间,是在bean创建完成后,初始化之前。是通过实现BeanFactoryPossetPoccer接口,主要通过PropertyPlaceholderConfigure接口、PropertySourcesPlaceholderConfigure(springboot)来实现的。

核心接口/类

名称描述
ApplicationContext保存了整个IOC的应用上下文 ,可以通过其中的BeanFactory获取到任意的bean
Beanfactory根据bean的描述创建具体的bean
BeanWrapper是对bean的包装,一般情况在springIoc的内部适用,提供了访问bean的属性值、bean的编辑注册、类的转换器,用统一的方式来访问bean的属性
factoryBean通过getObject方法来返回实际的bean对象

scope

是bean的作用域,默认使用单例模式,这也是使用最多的一种模式。

名称描述
singleton单例
prototype获取bean时都创建一个新的Bean
Request每次请求都创建一个Bean
Session在一个会话内保证一个bean
Global Session5.0后 已经废弃
Apllication5.0后新增
Websocket5.0后新增

事件机制

spring定义的5种标准事件ContextRefreshedEvent、ContextStartedEvent、ContextStoppedEvent、ContextClosedEvent、RequestHandleEvent。

常用注解

类型名注解集
类型类@Controller、@Service、@Repository、@Component、@Configuration、@Bean(方法上)
设置类@Requied、@Autowired、@Qualifier、@Scope
Web类@RequestMapping、@GetMapping、@PostMapping、@PathVariable、@RequestParam、@RequestBody、@ResponseBody
功能类@ComponentScan、@importResource、Transcation

配置方式

有Xml配置、注解方式、API方式

自动装配

  • 按类型bytype
  • 按名称byName
  • 构造器construction
  • 自动检测autodotect

Spring Context的初始化流程

在这里插入图片描述
左边图中ClassPathXmlAC是xml配置的AC,SpringAC是SpringBoot的AC,WebAC 是springmvc的AC,不论哪种AC都要调用AbstractAC.refresh()。
右边是refresh()方法的历程:

  1. 对刷新做准备,设置激活状态,初始化Context环境中的占位符,这个动作由具体的子类来完成
  2. 刷新并获取内部的beanFactory
  3. 对内部的beanFactory进行处理,比如设置类加载器和后置处理器,配置不能自动状态的类型,注册默认的环境bean
  4. 配置beanFactory的后置扩展处理能力,比如开始上下文之前做些处理逻辑,就可以复写这个方法
  5. 执行beanFacotory中配置的后置处理器,执行顺序是按顺序执行bean的后置处理器,再执行beanFactory的后置处理器。
  6. 在beanFactory中注册bean的后置处理器,bean的后置处理器可以在bean的初始化前和后执行处理
  7. 用来支持消息的国际化
  8. 初始化应用事件的广播器,用来想application通知各种应用产生的事件,是一个标准的观察者模式
  9. 是留给子类的扩展,用来初始化子类特有的bean
  10. 把事件的applicationBeanListionerBean注册到事件广播器,并对事件广播器中早起没有广播的bean进行通知
  11. 执行所有bean的初始化,实例化非延迟加载的单例bean
  12. 刷新工作,发布ContextRefreshEven事件
  13. 重置公共的缓冲,比如RefleshUtils、AnnotationUtils中的缓冲

bean的生命周期

在这里插入图片描述

SpringBoot

启动流程

  1. prepareEnvironment
  2. createApplicationContext
  3. postProcessApplicationContext
  4. applyInitializers
  5. listeners.contextPrepared
  6. listeners.contextLoaded
  7. refreshContext AbstractAC.refresh()

配置文件

bootstrap 、application,bootstrap是application的父级,bootstrap主要用于从额外的配置文件中加载信息和解密属性,并且是优先加载和不能被本地的配置覆盖

注解

@SpringBootApplication
@SpringbootConfiguration
@EnableAutoConfiguration
@Conditional

模块

  • starter 是springboot提供的和其它框架的无缝集成功能的一种方式,不需要关注各种依赖库的配置,由springboot的自动配置来实现
  • actuator 进行监控和管理,通过restfulapi请求来监管审计请求应用的一些情况
  • devtools 提升开发效率,支持热部署
  • cli 是命令行工具,支持使用groovy脚本,可以快速搭建spring原型项目
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值