分享

Java开发框架之Spring源码解析

 IT小白在线 2021-11-16

前言:

作为一个后台java开发,我们接触过很多开源框架。

从最初的webwork,struts到现在最流行的spring,我们会发现这些框架发展都是朝着简化编程,多元化拓展的方向发展的。

spring作为其中的翘楚者,依赖注入,控java培训制反转,支持配置文件,注解开发,第三方模块轻量接入,比如JDBC,Log,Cache等等。

慢慢的经过发展又出现了更加简便的SpringBoot-约定优于配置的最佳实践者。

给春天穿上靴子,极大的提高开发效率,借助maven工具,把以前搭建spring框架繁琐的配置文件过程变成了几个maven依赖,几乎实现了0配置。

随着互联网技术的发展以及各种成熟的解决方案的接入,随之出现了功能更加强大且不失简便的springcloud框架。

作为这些框架的核心,spring的源码完全值得我们研究,借助这个过程,我们不但可以学习spring中的代码风格实现逻辑,而且可以熟悉spring给我们提供的所有功能,方便于我们日后能够把自己的插件集成入spring中以及排查spring项目的问题。

spring给我们提供的最重要的一个功能就是上下文管理,通过这个上下文,我们能管理整个应用的bean,环境变量,资源文件信息等等。

这是spring里面的ApplicationContext接口定义。真实的实现类内部是相当复杂的,但是我们可以通过接口入手,去研究上下文给我们提供了一些什么功能。

EnvironmentCapable

接口定义实际上就一个方法返回当前的环境变量。

Environment:上下文中一系列的环境资源文件管理器,继承于PropertyResolver。

PropertyResolver:资源解析器,它提供一系列关于资源文件的读取方法,比如通过key去获取资源文件的value,通过一个key和Class信息,去获取一个对应的且已根据资源文件初始化好的bean,另一个重要的功能是去解析占位符“${...}”信息。

ConfigurableEnvironment:继承于Environment接口,可以修改环境内部profile属性,达到区分线上环境功能。

Environment可以理解为一个能区分配置文件的资源管理器,我们平时可能会用到application-dev.properties,application-pro.properties,dev,pro作为两个环境,spring只会去加载与它环境相同的配置文件,Environment中通过profile配置环境。

Environment=profile(配置)+propertyResolver(资源解析器);

MessageSource

messageSource接口是用来做国际化。

ApplicationEventPublisher

此接口是用来推送信息的,spring内部就实现了应用内部的消息推送功能,如果只需要做一个简单的本机消息推送功能,可以考虑此方法,

步骤一:先继承ApplicationEvent

步骤二:注册监听方法

步骤三:发送事件

ResourcePatternResolver

资源搜索器,比如提供一个表达式:“classpath*:java.lang.*",表示要去类路径下的java.lang包下去加载资源。

该接口继承于ResourceLoader,ResourceLoader解决的是从一个具体的路径下加载资源,相当于扩展了该接口的方法,资源(Resource)可以是一个输入流,也可以是一个文件。

ListableBeanFactory与HierarchicalBeanFactory

两个接口有一个公共的接口BeanFactory,该接口为applicationContext提供了强大的bean管理能力,包括获取class信息,初始化bean,自动注入等等。

BeanFactory:定义了一些列获取bean的方法,是一个最基础的bean容器提供者。

ListableBeanFactory:扩展了BeanFactory功能,相比直接存入bean,该接口提供了一系列的BeanDefinetion存取功能,beanDefinetion包含类的描述,注解信息,是否是代理类,以及依赖bean等。这些功能在bean的初始化过程中相当有用。

HierarchicalBeanFactory:为BeanFactory提供了一个层级功能,能通过这个接口拿到父BeanFactory。

一个最基本的applictionContext接口都能定义的如此复杂,所以我们不得不佩服这些框架开发者的周全之处,有了这些基础,spring才能灵活扩展各种功能。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多