Spring相关

一、概述

什么是Spring?

一个轻量级框架,简化Java开发,主要依赖于两个核心特性,也就是依赖注入DI以及面向切面编程AOP

  1. 减少代码量
  2. 入侵性小
  3. 低耦合
  4. 支持声明式编程 、
  5. 方便继承各种优秀的框架

核心

  1. IOC:依赖反转,将对象之间的依赖关系交由IOC容器管理,实现解耦
  2. DI:依赖注入,依赖反转的一部分,将属性等信息的注入交由IOC容器管理
  3. AOP:面向切面编程,以动态非入侵的方式对服务进行增强,可以将饮用隔层的功能分离出来形成可重用的功能组件

设计模式

  1. 工厂模式:BeanFactory
  2. 单例模式:默认单例 (循环依赖问题,多例Prototype会直接抛出异常)
  3. 代理模式:AOP动态代理
  4. 模版方法:JdbcTemplate
  5. 观察者模式:管理一对多的依赖关系,一个对象的状态发生改变时,所有依赖于他的对象都会被动得到通知或更新,ApplicationListener
  6. 策略模式:AOP中两种动态代理方法,基于JDK动态代理以及基于CGLIB的动态代理,主要区别是判断该类是否实现接口

核心容器模块

BeanFactory是最基本的接口,为,他使得Spring成为一个容器

五种事件类型

  1. 上下文更新:refresh
  2. 开始:start
  3. 停止:stop
  4. 关闭:close
  5. 请求处理事件

详细介绍:

  1. IOC:将程序代码的直接操控对象的调用权交给容器,有容器来实现对象的装配和管理
    负责创建对象、管理对象、装配对象、配置对象并且管理这些对象的生命周期
    优点;
    1. 解耦
    2. 方便管理
    3. 封装了处理过程

  2. 支持功能:

    1. 依赖注入
    2. 依赖检查
    3. 自动装配
    4. 支持集合
    5. 指定初始化与销毁方法
    6. 支持回调某些方法(但略有入侵性)
  3. 容器的创建

    1. BeanFactory:最底层接口,所有bean的基本操作都在这里实现,读取bean配置文档、管理bean的加载、实例化、控制管理bean的生命周期,维护bean之间的依赖关系,只有getBean的时候懒加载初始化bean
    2. ApplicationContext:高级容器,不仅包含了BeanFactory还添加了许多新功能,预加载bean,其中refresh方法用于刷新整个容器,重新加载/刷新所有的bean
  4. 依赖注入DI:接口啊注入(很少)、构造器注入、setter方法注入
    二者区别:

构造器注入setter方法注入
没有部分注支持部分注入
不会覆盖setter属性会覆盖setter属性
任意修改都会创建新实例不会创建新实例
适用于一次设置多个属性适用于设置少属性
  1. 配置元数据
    1. XML
    2. 注解
    3. Java

  2. 配置文件:描述类信息,配置信息,以及相互调用,相当于一个bean配置的说明书

  3. xml注入bean的方式
    1. setter
    2. 构造器:index、type
    3. 静态工厂
    4. 实例工厂

  4. bean的作用域:
    - singleton:单例,默认
    - prototype:多例,谨慎,频繁创建销毁性能开销
    - request:一个请求一个实例
    - session:一个session对应一个
    - global-session

  5. bean的生命周期
    1. 实例化
    2. 填充属性
    3. 实现Aware接口,调用其中相关方法
    4. 实现BeanPostProcessor的before方法
    5. 实现InitializingBean的afterPropertiesSet方法
    6. 调用自定义的初始化方法
    7. 实现BeanPostProcessor的after方法
    8. bean正常使用
    9. DisposableBean的destory方法
    10.调用自定义销毁方法

  6. 自动装配

    1. no
    2. byName
    3. byType
    4. constructor
    5. auto-detect
  7. Spring事务:本质上还是数据库对事务的支持

    1. 编程式事务:灵活性高,但维护困难
    2. 声明式事务:将业务于事务管理分离,只需要配置来管理
  8. Spring事务传播行为

    1. required:没有事务创建新事物,有事务加入食物
    2. supports:无非事务,有加入
    3. mandatory:无抛出异常,有加入
    4. requires_new:有无都创建新事物
    5. not-supported:有将事务挂起,其他以非事务运行
    6. never:使用以非事务运行,否则抛出异常
    7. nested:有嵌套在事务哪,没有按照required
  9. Spring的事务隔离机制(具体请参考数据库的文档)

    1. default:数据库默认隔离级别
    2. read-uncommited:出现幻读、脏独、不可重复读
    3. read-commited:幻读、不可重复读
    4. repeatable-read:幻读
    5. serializable:最安全
  10. AOP:面向切面编程,将于业务无关的却影响对哥对象的公共行为和逻辑,抽取并封装为一个可重用的模块,就叫做切面,减少了重复代码、影响空间耦合度、提高系统的可维护性

  11. AOP实现方式:代理模式

    1. 静态代理:AspectJ,在编译阶段生成AOp代理类,在编译阶段将切买呢织入字节码中,运行时就是之后的AOP对象
    2. 动态代理:SpringAOP,不去修改字节码,而是在运行时在内存中临时生成一个AOP对象,该对象包涵目标对象全部方法,并在特定切点做了增强处理并回调元对象的的方法,Spring中提供两种方式:基于JDK于基于CGLIB,主要根据是否实现接口。。。/。/
  12. 。。。,。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值