编程知识 cdmana.com

1.初识spring

一.spring基础知识

1.Spring概述

  • 2002年,Rod Jahnson首次推出了Spring框架雏形interface21框架。

  • 2004年3月24日,Spring框架以interface21框架为基础,经过重新设计,发布了1.0正式版。很难想象Rod Johnson的学历 , 他是悉尼大学的博士,然而他的专业不是计算机,而是音乐学。

  • Spring是轻量级的开源的JavaEE框架

  • Spring理念 : 使现有技术更加实用 . 本身就是一个大杂烩 , 整合现有的框架技术

    Spring有两个核心部分:IOC和Aop
    (1)IOC:控制反转,把创建对象过程交给Spring进行管理
    (2)Aop:面向切面,不修改源代码进行功能增强
    Spring特点
    (1) 方便解耦,简化开发
    (2) Aop编程支持
    (3)方便程序测试
    (4) 方便和其他框架进行整合
    (5)方便进行事务操作
    (6)降低API开发难度
    一句话概括:

    Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)

2.组成

img

Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式

img

3.Spring功能体系

3.1核心容器(Core Container)

核心容器(Core Container)在Spring的功能体系中起到支撑性作用,是其他模块实现功能的基石。核心容器包含Beans、Core、Context、SpEL四个模块,具体如下

1.Beans和Core模块
Beans和Core模块规定了创建、配置和管理Bean的方式**,提供了IOC和DI功能,BeanFactory类是Beans和Core模块的关键。**

2.Context模块
Context模块在Beans和Core模块的基础之上扩展了功能,通过ApplicationContext接口提供上下文信息。

3.SpEL模块
SpEL模块提供了一个强大的表达式语言,该语言用于在Spring运行时查询和操纵对象。

3.2数据访问及集成(Data Access/Integration)

数据访问及集成(Data Access/Integration)主要用于访问和操作数据中的数据,它主要包含JDBC、ORM、OXM、JMS 和Transactions模块。

JDBC模块
JDBC模块提供了JDBC抽象层,它消除了冗长的JDBC编码并解析数据库供应商特有的错误代码。

ORM模块
ORM模块为主流的对象关系映射API提供了集成层,这些主流的对象关系映射包括MyBatis、Hibernate和JDO等,除此之外,该模块可将对象关系映射框架与Spring提供的特性组合使用。

OXM 模块
OXM 模块提供了对OXM实现的支持,例如,JAXB、Castor、XML Beans、JiBX、XStream等。

MS 模块
JMS 模块包含生产(produce)和消费(consume)消息的功能。从4.1版本开始,Spring集成了spring-messaging模块 。

Transactions模块
Transactions模块的主要功能是事务管理,Spring支持手写beginTransaction()、commit()、rollback()的编程式事务,同时,它也支持通过注解或配置后由spring自动处理的声明式事务。

4. Spring的容器机制

4.1 容器机制简介

  • 容器是Spring框架实现功能的基础,Spring容器类似一家超级工厂,当Spring启动时,所有被配置过的类都会被纳入到Spring容器的管理之中。
  • Spring把它管理的类称为Bean,通常情况下,与Java Bean相比,Spring并没有要求Bean必须遵循一定的规范,即使是普通的Java类,只要被配置到容器中,Spring就可以管理它并把它作为Bean处理 。
  • Spring可以通过XML文件或注解获取配置信息,进而通过容器对象来管理Bean。Spring对Bean的管理体现在它负责创建Bean并管理Bean的生命周期。Bean运行在Spring容器中,它只需发挥自己功能,而无需过多关注Spring容器的情况。
  • 为了便于开发,Spring为开发人员提供了一套容器API,如此一来,开发人员可使用Spring提供的容器API完成对Bean的操作。在Spring的容器API中,开发人员接触最多的是BeanFactory和ApplicaitonContext接口,其中,ApplicaitonContext是BeanFactory的子接口。

4.2 BeanFactory接口

BeanFactory是IOC最基本的容器接口,它定义了创建和管理Bean的方法,为其他容器提供了最基本的规范。
BeanFactory接口提供了一系列操作Bean的方法,具体如表所示

img

  • 表中列举了BeanFactory接口的方法,开发者调用这些API即可完成对Bean的操作,无需关注Bean的实例化过程。
  • Spring中提供了几种BeanFactory的实现类,其中最常用的是XmlBeanFactory它可以读取XML文件并根据XML文件中的配置信息来管理Bean

4.3ApplicationContext接口

  • ApplicaitonContext接口的功能建立在BeanFactory接口的基础之上,它增强了BeanFactory的特性,增加了更多企业级的功能。

  • ApplicaitonContext接口为应用提供国际化访问功能,提供资源(包括URL和文件系统)的访问支持,可同时加载多个配置文件,引入事件机制,让容器在上下文中提供了对应用事件的支持,以声明式方式启动并创建Spring容器。除此之外,ApplicaitonContext接口可以为单例的Bean实行预初始化,并根据元素执行setter方法,这决定了此时单例的Bean可以被直接使用,提升了程序获取Bean实例时的性能,因此,实际开发中使用ApplicaitonContext接口更多。

  • 在实际开发中,如果想要获取ApplicaitonContext的实例,可以通过自定义一个实现ApplicationContextAware接口的工具类来完成,并且这个工具类也要配置到Spring容器中。ApplicationContextAware接口有一个setApplicationContext(ApplicationContext context)方法,该方法由Spring调用并传入ApplicationContext实例,工具类可通过该参数获取实例。

  • 为了便于开发,Spring提供了几种常用的ApplicaitonContext接口实现类,具体如表所示

img

  • 表中列举了几种常用的ApplicaitonContext接口实现类,开发人员可根据具体需求酌情调用。

4.4 容器的启动过程

  • Spring容器的底层原理相对复杂,因此,初学者无须在探究实现细节上耗费过多精力。在使用Spring编写入门程序之前,先大体了解Spring容器的启动过程即可。

  • Spring容器的启动过程包括三个基本步骤:BeanDifinition的Resource定位、BeanDifinition的载入与解析、BeanDifinition在Spring容器中的注册。

    1.BeanDifinition的Resource定位
    在获取配置信息时,Spring容器首先需要找到具体的Resource。在实际开发中,Resource可以是XML文件,也可以是注解,Resource定位由ResourceLoader通过统一的Resource接口来完成。

    2.BeanDifinition的载入
    读取配置信息,将配置信息转换为Spring容器内部的数据结构,这个数据结构就是BeanDifinition。通过BeanDifinition,Spring能够方便的对Bean进行管理。

    3.BeanDifinition的注册
    在完成BeanDifinition的载入后,需要将BeanDifinition注册到Spring的容器中。Spring容器通过一个HashMap对象持有BeanDifinition数据。注册BeanDifinition就是将BeanDifinition数据置入到HashMap对象中,这个过程通过调用BeanDifinitionRegistry接口实现。

  • 随着Spring容器的启动,Bean完成了在Spring容器中的定义。根据Spring容器的原理,在默认情况下,Bean的实例化将在Spring容器的启动过程中完成。如果用户想要在第一次向Spring容器索要Bean时完成实例化,可以通过配置信息中Bean的lazy-init属性来实现。Bean的lazy-init属性有三个可选值:default、false、true,其中,default和false功能相同,均默认在Spring容器的启动过程中完成实例化,只有当lazy-init的属性值为true时,Bean的实例化才会在用户第一次索要时执行。

版权声明
本文为[朝上]所创,转载请带上原文链接,感谢
https://blog.csdn.net/m0_51051154/article/details/121962840

Scroll to Top