spring

2021-03-09  本文已影响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开始
上一篇下一篇

猜你喜欢

热点阅读