Java开发框架之Spring源码解析

前言:
作为一个后台java开发,我们接触过很多开源框架。
从最初的webwork,struts到现在最流行的spring,我们会发现这些框架发展都是朝着简化编程,多元化拓展的方向发展的。
spring作为其中的翘楚者,依赖注入,控java培训制反转,支持配置文件,注解开发,第三方模块轻量接入,比如JDBC,Log,Cache等等。
慢慢的经过发展又出现了更加简便的SpringBoot-约定优于配置的最佳实践者。
给春天穿上靴子,极大的提高开发效率,借助maven工具,把以前搭建spring框架繁琐的配置文件过程变成了几个maven依赖,几乎实现了0配置。
随着互联网技术的发展以及各种成熟的解决方案的接入,随之出现了功能更加强大且不失简便的springcloud框架。
作为这些框架的核心,spring的源码完全值得我们研究,借助这个过程,我们不但可以学习spring中的代码风格实现逻辑,而且可以熟悉spring给我们提供的所有功能,方便于我们日后能够把自己的插件集成入spring中以及排查spring项目的问题。
spring给我们提供的最重要的一个功能就是上下文管理,通过这个上下文,我们能管理整个应用的bean,环境变量,资源文件信息等等。
这是spring里面的ApplicationContext接口定义。真实的实现类内部是相当复杂的,但是我们可以通过接口入手,去研究上下文给我们提供了一些什么功能。
Java开发框架之Spring源码解析_第1张图片
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
Java开发框架之Spring源码解析_第2张图片
步骤二:注册监听方法

步骤三:发送事件

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才能灵活扩展各种功能。

你可能感兴趣的:(javaspring)