首页 > 编程语言 > 详细

Spring

时间:2020-08-09 09:22:18      阅读:78      评论:0      收藏:0      [点我收藏+]

主要模块

  • Spring Core:核心类库,提供IOC服务。
  • Spring Context:提供框架式的Bean访问方式。
  • Spring AOP:AOP服务。
  • Spring DAO:对JDBC的抽象。
  • Spring ORM:对现有的ORM框架的支持。
  • Spring Web:提供了面向Web的综合特性。
  • Spring MVC:提供了向Web应用的MVC实现。

IOC

  • 优点:控制反转,对象的创建交给Spring配置。

  • 步骤:创建配置文件,配置要创建的对象类;创建工厂类,解析配置文件+反射。

AOP

  • 优点:面向切面编程,扩展功能不通过修改源代码实现。

  • 静态AOP:编译期,切面以字节码的形式直接编译到目标字节码中。

  • 动态AOP:运行期,类加载后,为接口实现动态代理类,将切面植入到动态代理类中。

设计模式

  • 单例:一个Spring Bean容器(SpringContext)中仅有一个实例。
  • 工厂:IOC,封装了创建Bean的过程,不通过new而是通过工厂来获取对象。
  • 代理:AOP,代理类中持有一个被代理的实例,通过代理类调用被代理对象的方法,在方法前后加入其他方法处理逻辑。
  • 适配器:SpringMVC中的HandleAdapter。转换类的接口。场景:第三方登录自由适配。
  • 责任链:SpringMVC中的DispatchServlet。Handler定义处理请求的接口;ConcreteHandler选择处理请求或者传递请求给下家。场景:让一个以上的对象有机会处理某个请求。

Bean生命周期

  • 创建

    • 实例化Bean。

    • 注入Bean ID,Bean Factory或者ApplicationContext。

    • 调用前置初始化方法postProcessBeforeInitialization。

    • 调用afterPropertiesSet方法。

    • 调用Bean自身的初始化方法。

    • 调用Bean的后置初始化方法postProceeAfterInitialization。

  • 销毁

    • 调用DisposableBean的destroy方法。
    • 调用自身定制的destroy方法。

Bean作用域

类别 说明
singleton 每个IOC容器中仅存在一个Bean实例
prototype 每次从容器中调用Bean时,会返回新的实例
request 每次Http请求会创建一个新的Bean,作用域仅适用于WebApplicationContext
session 同一个session共享一个Bean,作用域仅适用于WebApplicationContext

配置Bean的方法

  • 基于xml的配置方式

  • 基于注解的配置方式

    • 定义注解:@Component,@Controller,@Repository,@Service
    • 生命周期注解:@PostConstruct,@PreDestroy
    • 依赖检查注解
    • 自动装配注解:@Autowired
  • 基于Java类的配置:@Configuration,@Bean

注入属性的方法

  • Setter注入,构造器注入,注解注入,接口注入。

循环依赖

  • 两个以上的Bean互相持有对方:构造器的循环依赖;属性的循环依赖。

  • 解决方法:先从一级缓存singletonObjects获取对象(实例化完成的Bean),若获取不到且对象正在创建中,则从二级缓存earlySingletonObjects中获取对象,若获取不到对象(未装配属性的Bean),则从三级缓存singletonFactory.getObjects()获取(实例化的BeanFactory)。

  • 关键:调用构造器,根据对象引用定位到堆中的对象,提前曝光对象。

父子容器

  • Spring父容器(包含mapper,service,dao等),SpringMVC子容器(包含controller等)。
  • 子容器可以访问父容器中的对象,父容器不能访问子容器中的对象。

事务实现原理

  • 划分处理单元IOC:用Spring中的IOC划分事务处理单元,将对事务的各种配置放到了IOC容器中。
  • AOP拦截需要进行事务处理的类:生成代理对象,通过TransactionIntercepter完成对代理方法的拦截,将事务处理的功能编织到拦截的方法中。读取IOC事务配置属性,转化为事务处理所需要的内部数据结构。
  • 事务的处理实现:委托给具体的事务处理器(TransactionManager)实现。

类加载机制

  • 过程:1、加载:生成class对象;2、验证;3、准备:static变量分配内存和初始值;4、解析:符号引用替换为直接引用;5、初始化:父类没初始化需先初始化。(家宴准解出
  • 双亲委派机制:避免重复加载,安全。

Spring事务传播机制

  • 控制当前事务如何被传播到调用的接口方法中
事务传播行为类型 没有当前事务 存在事务
required 新建 加入
supports 非事务 支持
mandatory 异常 使用
requires_new 新建 挂起
not_supported 非事务 挂起
never 非事务 异常
nested 新建 嵌套

BeanFactory和ApplicationContext的区别

  • BeanFactory:控制Bean的生命周期,维护Bean的依赖关系;延迟加载。
  • ApplicationContext: BeanFactory的子接口,提供更加完整的框架功能。容器启动时,一次性创建所有的Bean。

Spring Boot的启动流程

  • 创建SpringApplicationRunListener
    • 通知Starting
  • 配置Environment
    • 通知environmentPrepared
  • 创建ApplicationContext
  • 初始化ApplicationContext,设置Environment加载相关配置
    • 通知contextPrepard,contextLoaded
  • Refresh ApplicationContext
    • 通知Started
  • 完成启动
    • 通知running
  • OVER

Spring框架中的事件

  • Spring事件由ApplicationContext发布。
    • ContextStartedEvent事件:ApplicationContext启动后触发。
    • ContextStopedEvent事件:ApplicationContext停止后触发。
    • ContextRefreshedEvent事件:ApplicationContext刷新后触发。
    • ContextClosedEvent事件:ApplicationContext关闭后触发。
  • Bean实现了ApplicationListener接口,当一个ApplicationEvent被发布后,bean会自动被通知。

Spring

原文:https://www.cnblogs.com/ash1523590342/p/13461603.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!