spring-framework 源码阅读(一)

初识spring-framework

推荐教程,免费哦

概述

Spring自述Spring可以使每个人都可以更快,更轻松和更安全的进行Java编程。Spring对速度,简单性和生产率的关注,使得Spring成为了世界上最受欢迎的Java框架。

1.Spring无处不在
Spring灵活的库受到全球的开发者的信任,每天为数百万终端用户提供令人愉悦的体验。Spring还有来自所有科技界大牌的贡献,包括阿里巴巴、亚马逊、谷歌、微软等等。
2. Spring是灵活的
Spring灵活而全面的扩展集和第三方库使开发人员可以构建几乎任何可以想象到的应用程序。在其核心,Spring框架的控制反转(IOC)和依赖注入(DI)特征为广泛范围的特征和功能提供了基础。无论您是在为web构建安全的、反应式的、基于云的微服务,还是为企业构建复杂的流式数据流,Spring都可以提供帮助。
3. Spring是多产的
springboot改变了您处理Java编程任务的方式,从根本上简化了您的体验。springboot结合了应用程序上下文和自动配置的嵌入式web服务器等必要条件,使微服务开发变得轻而易举。为了更快,您可以将springboot与springcloud丰富的支持库、服务器、模式和模板相结合,在创纪录的时间内将整个基于微服务的架构安全地部署到云中。
4. Spring更快
我们的工程师非常关心性能。在Spring中,默认情况下,您会注意到快速启动、快速关闭和优化的执行。Spring项目也越来越多地支持反应式(非阻塞)编程模型,以获得更高的效率。开发者生产力是Spring的超级力量。springboot可以帮助开发人员轻松地构建应用程序,并且比其他竞争模式省力得多。嵌入式web服务器、自动配置和“fat
jar”帮助您快速入门,Spring
DevTools中的LiveReload等创新意味着开发人员可以比以往任何时候都更快地进行迭代。您甚至可以在几秒钟内启动一个新的Spring项目。Spring官网提供快速构建项目的功能,可以直接在网页上面构建,download本地后直接使用,快速链接
start.spring.io
5. Spring是安全的
Spring在快速和负责任地处理安全问题方面有着良好的记录。Spring提交者与安全专业人员合作,修补和测试任何报告的漏洞。第三方依赖关系也会被密切监视,并且会定期发布更新来帮助您尽可能安全地保存数据和应用程序。此外,springsecurity使您更容易与行业标准的安全方案集成,并提供可信赖的默认安全解决方案。
6. Spring是有背后支持的
Spring社区是一个庞大的、全球性的、多样化的社区,涵盖了所有年龄和能力的人,从完全的初学者到经验丰富的专业人士。无论您在旅途中的何处,您都可以找到帮助您更上一层楼所需的支持和资源:快速入门指南和教程视频会议支持,甚至是正式培训和认证

优势

一、总结而言:

  • 低入侵式设计,代码污染极低
  • 独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write Once, Run Anywhere。
  • Spring的DI(依赖注入)机制降低了业务对象替换的复杂性,提高了组件之间的解耦。
  • Spring的AOP(面向切面编程)支持将一些通用操作,如安全、事务、日志等进行集中式管理,从而提供了很好的复用。
  • Spring并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或者全部,简而言之,就是不流氓,哈哈哈。
  • Spring的ORM提供了与第三方持久层框架的良好整合,并简化了底层数据库的访问。

二、详述

  1. 方便解耦,简化开发
    通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制。避免硬编码所造成的过度程序耦合。有了Spring,用户不必再为单例实现类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层应用。
    注意:避免出现循环依赖(后续会出循环依赖的博客,敬请期待)
  1. AOP编程的支持
    通过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统的OOP实现的功能可以通过AOP轻松实现。包括日志打印,异常抛出等等。
  1. 声明式事务的支持
    在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式的方式灵活的进行事务管理,提高开发效率和质量。
  1. 方便程序的测试
    可以用非容器依赖的编程方式进行几乎所有的测试工作,在Spring里,测试不再是昂贵的操作,而是随手可做的事情。例如Spring对Junit的支持,可以通过注解方便地测试Spring程序。现在Junit4已经被Junit5逐步替代了,建议使用Junit5进行测试哦,欢迎来到Junit5
    Junit4和Junit5的对比:可以在官网查阅,也可以看看这位博主的文章哦,对比
  1. 方便集成各种优秀的框架
    Spring不排斥各种优秀的开源框架,相反,Spring可以降低各种框架的使用难度,Spring提供了对各种优秀框架的直接支持,包括但不限于:Hibernate、Quartz等。
  1. 降低了Java EE API的使用难度
    Spring对很多难用的Java EE API(如:JDBC,JavaMail,远程调用等)提供了封装,通过Spring的简易封装,这些Java EE API的使用难度被大大的降低了。
  1. 源码学习的经典范例
    Spring的源码设计精妙,结构清晰,匠心独运,处处体现着大师对Java设计模式的灵活运用以及对Java技术的高深造诣。如果想在段时间内,提高自己对Java技术水平和应用水平,学习和研究Spring源码会有意想不到的收获哦。加油!

Spring资源位置

  • Spring官网: https://spring.io/
  • Spring framework网址: https://spring.io/projects/spring-framework
  • Spring源码Git:https://github.com/spring-projects/spring-framework
    下载时注意版本哦

Spring体系结构

在这里插入图片描述

核心概念

  • OOP: Object Oriented Programming, 面向对象编程
  • 容器 :存储单例Bean的实例
    基础容器: BeanFactory
    高级容器: ApplicationContext
    二者区别: 基础容器产生Bean实例的时机,是Bean第一次被调用的时候。高级容器是服务启动的时候,就会创建所有单例的bean实例。
  • IoC: Inversion of Control,控制反转。指的是创建Bean实例的角色发生了反转,由程序员主动new变为了框架帮你new,控制反转离不开DI(依赖注入)
  • DI: Dependency Inject, 依赖注入。就是设置成员变量。
  • AOP: Aspect Oriented Programming, 面向切面编程。是一种开发思想。
  • BeanFactory和FactoryBean的区别

BeanFactory是Spring的顶级接口,是Spring中容器的底层实现接口。BeanFactory实现类管理着所有的单例bean的实例。
FactoryBean是Spring容器中管理的一个特殊的bean,因为该bean还能产生指定类型的bean实例。

  • BeanFactoryPostProcessor和BeanPostProcessor的区别

BeanFactoryPostProcessor主要是Bean【实例创建】之前,BeanDifinition初始化前后去调用。
BeanPostProcessor主要是Bean【实例初始化】前后,对Bean实例进行一些后置操作。

Spring源码的下载及安装

  1. 准备Git环境
  2. 获取Spring Framework资源路径,选择相应的版本,克隆到本地。本次选择的版本是5.1.x。
    1. 获取资源
      打开Spring官网,找到Projects,点击view all projects
      在这里插入图片描述
      找到SpringFramework
      在这里插入图片描述
      进入Git目录
      在这里插入图片描述
      选择Spring版本,并获取下载路径
      在这里插入图片描述
      Clone资源到本地
	git clone https://github.com/spring-projects/spring-framework.git
  1. 安装Gradle
    Gradle是一个基于Groovy的构建工具,它使用Groovy来编写构建脚本,支持依赖管理和多项目创建,类似Maven。
    下载地址:https://gradle.org/releases/
    1、下载Gradle
    2、设置环境变量,在Path中加入{gradle解压路径}\bin
    3、找到工程目录下的setting.gradle文件,右键import as gradle project。

  2. 测试代码
    右键工程目录,选择new module --> 选择gradle --> 设置模块名(ArtifactId)–> 修改build.gradle,添加compile(project(":spring-context"))

    接下来就开始我们的源码阅读之旅吧~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值