Spring学习简记

Spring学习分享

前言:Spring框架的出现就像它的名字一样,仿佛开发程序员进入了“春天”,Spring框架作为如今互联网公司开发的第一选择,仅仅了解Spring框架的源码是远远不够的,我们还需要通过阅读Spring源码掌握Spring框架的原理,在阅读Spring源码时,学习Spring框架在代码设计上高超的技术,Spring框架作为其他框架或者中间件的常用介入方式,理解期其扩展点是什么必要的。

Spring框架的整体架构

图1 Spring体系架构
学习Spring框架,Spring官网是最好的辅助工具,任何关于Spring生态的变化都可以在Spring官网了解到。

1、Core Container(核心容器)

该模块主要包含Core、Beans、Context和SpEL模块。其中Core和Beans是整个框架最基础的部分,提供IOC和依赖注入特性。这里最重要的概念就是
BeanFactory,提供了以Factory模式的实现来消除对程序性
单例模式。
Core:模块主要包含Spring框架最基本的核心工具类,Core是其他组件的基础核心。
Beans:模块主要包含访问配置文件、创建/管理Bean以及IOC/DI相关的类。
Context:继承了Beans的特性,主要为Spring提供大量的扩展,如国际化、事件机制、资源加载等待。ApplicationContext接口是Context模块的
关键。
SpEL:模块提供了一个强大的语言表达式。

2、AOP and Instrumentation

提供符合AOP Alliance标准的面向切面编程的实现,可以让你定义如方法拦截器和切点,从而降低程序之间的耦合性。
AspectJ模块:提供了与AspectJ的集成 。
Instrumentation模块:提供用于某些应用程序服务器的类工具支持和类加载器实现 。

3、Messaging

该模块具有来自Spring Integration项目的关键抽象,如Message,MessageChannel,MessageHandler等。它们构成基于消息的应用程序的基础。该模块
还包括一组注释,用于将消息映射到方法,类似于基于Spring MVC注释的编程模型。

4、Data Access/Integration

数据访问/集成层由JDBC,ORM,OXM,JMS和事务模块组成。
JDBC模块:提供了JDBC抽象层,从而无需进行繁琐的JDBC编码和数据库特定错误代码(不同数据代码可能不同)的解析。
事务模块:支持对实现特殊接口的类以及所有POJO(普通Java对象)进行编程和声明式事务管理。
ORM模块:该模块为当前流行的ORM(包括JPA,JDO和Hibernate)提供了集成层。使用ORM模块,可以将所有这些O/R映射框架与Spring提供
的所有功能结合使用,如前面提到的事务管理功能。
OXM模块:提供了一个抽象层,该抽象层支持Object/ XML映射实现,例如JAXB,Castor,XMLBeans,JiBX和XStream。
JMS模块(Java Messaging Service):包含用于生成和使用消息的功能。从Spring Framework 4.1开始,提供了与Spring­Messaging模块集
成。

5、Web

Web上下文模块建立在应用程序上下文模块之上,为基于Web的应用程序提供上下文支持。该模块包含Web、WebMVC、Web Socket和Web­Porlet模块。
Web模块:提供了基本的面向Web的集成功能,如文件上传功能以及使用Servlet监听器和面向Web的应用程序上下文对IoC容器的初始化。
WebMVC模块(也称为Web­Servlet模块):包含基于Spring的Model­View­Controller(MVC)支持和针对Web应用程序的Rest Web服务实
现。
Web­Portlet 模块(也称为Web­Portlet模块):提供Portlet环境中的MVC实现。

6、Test

该模块支持使用JUnit或TestNG对Spring组件进行单元测试和集成测试。
在这里插入图片描述

Spring源码介绍

Spring声明式事务学习

自从Spring5.X开始Spring官方建议使用SprigBoot开发
Transaction事务
Ioc控制反转,解决了类与类之间的耦合关系

如何将一个类变成一个Bean
1、配置xml、@注解、javaconfig
2、加载Spring上下文
xml:new ClasspathXmlApplicationContext(“xml”);
@:new AnnotationConfigApplicationContext(""config.class);
getBean(); //既可以获取Bean又可以生产Bean
一个类生成bean,最核心的接口就是BeanFactory
getBean()方法

Application app=new ApplicationContext();
// An highlighted block
var foo = 'bar';

BeanFactry是Spring的顶层核心接口,使用了简单工厂设计模式,
BeanDefinition是Spring的顶层核心接口,用于存储生产Bean的一切基本原料
BeanDefinitionRegistry为BeanDefinition的注册器,该方法的核心方法为registryBeanDefinition()方法
读取、扫描、注册BeanDefinition
BeanFactory和ApplicationContext区别与联系:
1)都可以用来生产Bean;
2) Application额外有事件,国际化、AO等的功能
BeanFactory工厂用于根据BeanDefinition来生产Bean
BeanFactory只有根据BeanDefinition来生产Bean的功能

Bean的生命周期

1、根据BeanDefinition进行反射,得到一个空壳Bean
2、填充属性,解析@AutoWired和@Value注解(会存在循环依赖问题)
3、初始化,配置一些initMethod
Map<key,value> 就是大名鼎鼎的单例池 一级缓存
实例化,@Bean标记的方法也是工厂方法
实例化;反射和工厂方法
Spring扩展点:
Spring提供了扩展接口对BeanDefinition进行扩展
BeanFactoryPostProcess:Bean工厂后置处理器
beanFactoryPostProcess方法来处理BeanDefinition,可以来修改BeanName
BeanFactoryPostProcess:Bean在Spring集成其他框架时会用到(修改BeanDefinition)
BeanFactoryRegistryPostProcess:postProcessBeanDefinitionRegistry方法(注册BeanDefinition)
除了Ioc的其他实现都需要使用扩展点
一个用于修改BeanDefinition,另外一个用于修改Bean的生命周期
BeanPostProcess可以用于让Spring容器停止生产Bean
一共调用9次BeanPostProcess
InitialBeanPostPrcess
Spring除了Ioc,所用的扩展点都是通过扩展点来实现的
在Bean的生命周期最后一步,初始化后进行了AOP动态代理,
Bean的生命周期,包括实例化、属性填充、初始化、销毁等四部分
在初始化时会调用各种生命周期回调方法,例如BeanNameAware

SpringIoc的加载过程,SpringBean的生命周期?

Spring有哪些扩展接口?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值