spring

作者: 何佳阳 | 来源:发表于2021-03-09 13:58 被阅读0次

    一:概述(知道)

    Spring简介

    Spring是以IOC和AOP为内核的full-stack轻量级开源框架Spring是以IOC和AOP为内核的full-stack轻量级开源框架

    Spring发展历程

    2004 年 03 月,1.0 版发布。

    2006 年 10 月,2.0 版发布。

    2007 年 11 月,更名为 SpringSource,同时发布了 Spring 2.5。

    2009 年 12 月,Spring 3.0 发布。

    2013 年 12 月,Pivotal 宣布发布 Spring 框架 4.0。

    2017 年 09 月,Spring 5.0 发布

    Spring优势

    解耦

    Spring就是一个大工厂,可以将所有对象的创建和依赖关系的维护工作都交给Spring容器的管理,大大的降低了组件之间的耦合性。

    Aop编程支持

    Spring提供了对AOP的支持,它允许将一些通用任务,如安全、事物、日志等进行集中式处理,从而提高了程序的复用性。

    声明式事务

    只需要通过配置就可以完成对事物的管理,而无须手动编程。

    对测试的支持

    Spring提供了对Junit4的支持,可以通过注解方便的测试Spring程序。

    方便集成各种优秀框架

    Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如Struts、Hibernate、MyBatis、Quartz等)的直接支持。

    ** 对JavaEE API的封装**

    Spring对Java EE开发中非常难用的一些API(如JDBC、JavaMail等),都提供了封装,使这些API应用难度大大降低。

    优秀的源码

    Spring核心结构

    模块化思想的体现

    Spring-Core

    Spring-Aop

    Spring-Dao

    Spring-Context

    Spring-Web

    Spring-ORM

    二:核心思想(理解)

    IOC 控制反转

    什么是IoC
    
        创建对象的权利反转给框架,不需要我们自己new对象了,我们丧失了创建对象的权利,但是也得到了福利,不需要我们来管理对象了
    
    IoC解决什么问题
    
        解决对象之间耦合问题
    
    IOC和DI的区别
    
        同一件事情不同角度的描述
    

    AOP 面向切面编程

    横切逻辑:多个纵向流程中出现的重复子流程逻辑
    
    image.png
    本质
    
        在不改变原有业务逻辑代码的情况下,增强横切逻辑,避免横切逻辑代码重复
    
    为什么叫面向切面编程
    
        切:横切逻辑,原有业务逻辑不能动
    
        面:横切代码影响的往往是很多方法,构成了一个面
    

    三:手写实现IOC和AOP(掌握)

    分析案例,找出问题

    问题一:new关键字将service层的实现类TransferServiceImpl
    

    和Dao层的具体实现类JdbcAccountDaoImpl耦合在了一起,当需要切换Dao层实现类的时候必须得修改service代码,不符合面向接口开发的最优原则

    问题二:service层没有添加事务控制,出现异常可能导致数据错乱,问题很严重,尤其在金融银行行业。
    

    针对问题提出解决方案

    针对问题一
    
        手写IOC
    
            反射+工厂模式
    
    针对问题二
    
        事务失效原因-->每次操作数据库都是一个新的连接
    

    按照解决方案完成编码

    1、ConnectionUtils提供了一个获取当前线程绑定Connection的方法
    
    2、Service层事务管理逻辑代码单独提取为了事务管理器类TransactionManager(事务的开启、提交、回滚)
    
    3、我们不可能给每一个方法添加TCF代码块来控制事务,所以使用动态代理技术,开发ProxyFactory
    

    四:Spring IOC的应用(掌握)

    说明
    
        Bean定义方式不同、JavaSE/JavaEE环境不同,导致容器启动方式也会不同
    
    BeanFactory和ApplicationContext的区别
    
        Spring中IOC容器的顶级接口,定义基础规范;
    
        ApplicationContext是容器的高级接口,比BeanFactory拥有更多的功能(比如XML读取)
    
    IOC三种模式
    
        模式一:纯XML模式
    
            创建Bean的三种方式
    
                class指定全限定类名,通过无参构造器创建
    
                静态方法创建
    
                实例化方法创建
    
            Bean标签属性
    
                id
    
                class
    
                scope
    
                    singleton
    
                    prototype
    
                生命周期属性
    
                    init-method
    
                    destory-method
    
                name
    
                factory-bean
    
                factory-method
    
            DI依赖注入
    
                构造器注入
    
                    使用<constructor-arg>标签
    
                set注入
    
                    使用<property>标签,ref属性用于注入其它bean,value属性用于注入普通数值
    
        模式二:XML+注解模式
    
        模式三:纯注解模式
    
        原则:从xml开始,学习注解时将xml中标签、属性与注解一一对应即可
    
    IOC高级特性
    
        lazy-init(了解)
    
        FactoryBean和BeanFactory(重点)
    
            BeanFactory是IOC容器的核心接口,它主要作用就是实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。
    
            是一个工厂Bean,可以生成某一个类型Bean实例,它最大的一个作用是:可以让我们自定义Bean的创建过程
    
        后置处理器(重点)
    
            BeanPostProcessor,Bean对象后置处理器
    
            BeanFactoryPostProcessor,Bean工厂后置处理器
    
                BeanFactory初始化之后可以使用这个后置处理器做一些事情
    
            其他
    
                SpringBean生命周期
    
                BeanDefinition对象
    
                    我们在 XML 中定义的 bean标签,Spring 解析 bean 标签成为⼀个 JavaBean,这个JavaBean 就是 BeanDefinition
    

    五:Spring IOC源码深度剖析

    好处
    
        提⾼培养代码架构思维、深⼊理解框架
    
    源码剖析技巧
    
        原则
    
            定焦原则:抓主线
    
            宏观原则:站在上帝视⻆,关注源码结构和业务流程(淡化具体某⾏代码的编写细节)
    
        ⽅法和技巧
    
            断点(观察调⽤栈)
    
            反调(Find Usages)
    
            经验(spring框架中doXXX,做具体处理的地⽅)
    
    流程分析
    
        循环依赖
    
            循环依赖其实就是循环引⽤,也就是两个或者两个以上的 Bean 互相持有对⽅,最终形成闭环
    
            场景
    
                构造器的循环依赖(构造器注⼊)
    
                Field 属性的循环依赖(set注⼊)
    

    六:Spring AOP应用(掌握)

    AOP相关术语
    
        连接点JoinPoint
    
            每个个方法的特殊时机点都是连接点,是一种候选点
    
        切入点PointCut
    
            用于定位真正感兴趣的方法
    
        增强Advice
    
            横切逻辑+访问信息(具体哪种连接点)
    
        目标对象Target
    
        代理对象Proxy
    
        织入Weaving
    
        切面Aspect
    
            切面=切入点+增强=切入点+横切逻辑+方位信息
    
        注意:这么多的概念,目的就是为了锁定在哪个地方插入什么横切逻辑代码
    
    Spring AOP配置
    
        XML配置
    
        XML+注解
    
        纯注解
    
    Spring 声明式事务
    
        回顾事务基本知识
    
            四大特性、并发问题、隔离级别、传播行为
    
        配置方式
    
            xml配置
    
            xml+注解
    
            纯注解
    

    七:Spring AOP源码剖析

    代理对象创建流程
    
    声明式事务控制组件分析--->从@EnableTransactionManagement开始
    

    相关文章

      网友评论

          本文标题:spring

          本文链接:https://www.haomeiwen.com/subject/yetbqltx.html