spring框架简介

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAeG1oLXN4aC0xMzE0,size_20,color_FFFFFF,t_70,g_se,x_16

 

 

Spring 是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring 框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。

二、Spring框架组成

 

7个主要模块如下

         

 

Core(核心容器):核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是通过工厂模式来实现的。BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。

 

 

 

 

 

 

三、核心组件详解 Bean/Context/Core/IOC/AOP/MVC

 

  Spring 框架中的核心组件只有三个:Core、Context 和 Beans,其中Beans 组件最为重要;

 

  Spring 就是面向 Bean 的编程(BOP,Bean Oriented Programming):关键点是把对象之间的依赖关系转而用配置文件来管理,也就是依赖注入机制;

 

  Spring 设计策略类似面向对象编程(Object Oriented Programming),Spring将对象包装在 Bean 中,进而对这些对象管理以及进行一些额外操作;

 

  三者关系:Bean 中包装Object,Object中包含数据;Context是Bean 依赖关系的集合;Core 是发现、建立和维护每个 Bean 之间的关系所需要的一些列的工具;

 

  

 

1、Bean 组件在 Spring 的 org.springframework.beans 包下:Bean 的定义、Bean 的创建以及对 Bean 的解析

 

  (1)Bean 的定义,BeanDefinition,类图如下:

 

 

 

    Bean 的定义就是完整的描述了在 Spring 的配置文件中定义的 <bean/> 节点中所有的信息,包括各种子节点。当 Spring 成功解析已定义的一个 <bean/> 节点后,在 Spring 的内部它就回被转化成 BeanDefinition 对象。以后所有的操作都是对这个对象完成的。

 

 

 

  (2)Bean 的创建由工厂模式实现,类图如下:

 

  

 

    其中BeanFactory作为最顶层的一个接口类,它定义了IOC容器的基本功能规范,BeanFactory 有三个子类:ListableBeanFactory、HierarchicalBeanFactory 和AutowireCapableBeanFactory;最终实现所有的接口的默认实现类是DefaultListableBeanFactory;ListableBeanFactory 接口表示这些 Bean 是可列表的,而 HierarchicalBeanFactory 表示的是这些 Bean 是有继承关系的,也就是每个 Bean 有可能有父 Bean。AutowireCapableBeanFactory 接口定义 Bean 的自动装配规则。

 

 

 

    (3)Bean 的解析,类图如下:

 

    

 

2、Context 组件在 Spring 的 org.springframework.context 包下:环境构建

 

    Context 相关的类结构图如下:

 

    

 

    ApplicationContext 是 Context 的顶级父类,他除了能标识一个应用环境的基本信息外,他还继承了扩展了 Context 功能的五个接口;

 

    ApplicationContext 继承了 BeanFactory(再次Spring 容器中运行的主体对象是 Bean);ApplicationContext 继承了 ResourceLoader 接口用于访问到任何外部资源(Core 的功能);

 

    ApplicationContext 的子类主要包含两个方面:

 

ConfigurableApplicationContext 表示该 Context 是可修改的,也就是在构建 Context 中用户可以动态添加或修改已有的配置信息,它下面又有多个子类,其中最经常使用的是可更新的 Context,即 AbstractRefreshableApplicationContext 类。

WebApplicationContext 顾名思义,就是为 web 准备的 Context 他可以直接访问到 ServletContext,通常情况下,这个接口使用的少。

    Context 作为 Spring 的 Ioc 容器,基本上整合了 Spring 的大部分功能,或者说是大部分功能的基础:标识一个应用环境;利用 BeanFactory 创建 Bean 对象;保存对象关系表;能够捕获各种事件;

 

3、Core 组件: Spring 的核心组件

 

  Core 组件作为 Spring 的核心组件,包含了很多的关键类,重要组成部分就是定义了资源的访问方式;

 

  Core 相关的类结构图如下:

 

  

 

    Resource 接口继承了 InputStreamSource 接口,这个接口中有个 getInputStream 方法,返回的是 InputStream 类,所有的资源都被可以通过 InputStream 类来获取,屏蔽资源提供者;

 

    ResourceLoader 接口实现加载资源,保持资源的加载者的统一,默认实现是 DefaultResourceLoader;

 

    Context 和 Resource 的类关系图如下:

 

    

 

    Context 是把资源的加载、解析和描述工作委托给了 ResourcePatternResolver 类来完成,他相当于一个接头人,他把资源的加载、解析和资源的定义整合在一起便于其他组件使用;

 

 4、IOC — 贴入源码注释均为“英译汉”,望理解

 

  概念Inversion of Control(控制反转):把对象之间的依赖关系转而用配置文件来管理;对组件对象的控制权转移给外部容器;对象的协作关系由容器来建立。(不再由对象自己来负责)

 

  (1)如何创建 BeanFactory 工厂?

 

  Ioc 容器,实际上是 Context 组件结合其他两个组件共同构建了一个 Bean 关系网,源码如下

 

  源码片段0:ApplicationContext =new FileSystemXmlApplicationContext(xmlPath);

 

复制代码

 1 /**

 2 * Create a new FileSystemXmlApplicationContext, loading the definitions

 3 * from the given XML files and automatically refreshing the context.

 4 * @param configLocations array of file paths

 5 * @throws BeansException if context creation failed

 6 */

 7 //构造方法

 8 public FileSystemXmlApplicationContext(String... configLocations) throws BeansException {

 9 this(configLocations, true, null);

10 }

11     

12 //实际调用    

13 public FileSystemXmlApplicationContext(String[] configLocations, boolean refresh, ApplicationContext parent)  

14 throws BeansException {    

15 super(parent);  

16 setConfigLocations(configLocations);  

17 if (refresh) {  

18 refresh();  

19 }  

20 }

复制代码

  源码片段1:AbstractApplicationContext 的refresh 方法

 

复制代码

 1 //构建的入口就在 AbstractApplicationContext 类的 refresh 方法中,方法的代码如下:

 2 public void refresh() throws BeansException, IllegalStateException {  

 3 synchronized (this.startupShutdownMonitor) {  

 4 //调用容器准备刷新的方法,获取容器的当时时间,同时给容器设置同步标识  

   

// Prepare this context for refreshing. 

 

 5 prepareRefresh();  

 6 //告诉子类启动refreshBeanFactory()方法,Bean定义资源文件的载入从   // Tell the subclass to refresh the internal bean factory.

 7 //子类的refreshBeanFactory()方法启动 --父子工厂均进行刷新

 8 ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();  

 9 //为BeanFactory配置容器特性,例如类加载器、事件处理器等         // Prepare the bean factory for use in this context.

10 prepareBeanFactory(beanFactory);  

11 try {  

12 //为容器的某些子类指定特殊的BeanPost事件处理器  

            

// Allows post-processing of the bean factory in context subclasses. 

 

13 postProcessBeanFactory(beanFactory);  

14 //调用所有注册的BeanFactoryPostProcessor的Bean         

  

// Invoke factory processors registered as beans in the context. 

 

15 invokeBeanFactoryPostProcessors(beanFactory);  

16 //为BeanFactory注册BeanPost事件处理器.               // Register bean processors that intercept bean creation.

17 //BeanPostProcessor是Bean后置处理器,用于监听容器触发的事件  

18 registerBeanPostProcessors(beanFactory);  

19 //初始化信息源,和国际化相关.                     // Initialize message sourc

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值