spring

一:概述(知道)

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开始
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345