Spring 组件概述

Spring 概述
Spring 基本知识
  1. 简介
    Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring的核心是控制反转(IoC)和面向切面(AOP)。

    • Spring IoC(Inversion of Control):控制反转,是关于一个对象如何获取它所依赖的对象,对象之间的相互依赖关系有 IoC 容器进行管理,并由 IoC 容器完成依赖对象的注入。这种管理关系有对象本身转移到了IoC容器,所以称之为“控制反转”。
    • Spring AOP(Aspect Oriented Programming):面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
      常用于日志记录,性能统计,安全控制,事务处理,异常处理等等。
  2. 依赖注入的方式:

    • 接口注入
    • setter注入
    • 构造器注入
  3. Spring Bean的作用域

    • singleton 作用域
      当一个bean的 作用域设置为singleton, 那么Spring IOC容器中只会存在一个共享的bean实例
    • prototype
      prototype作用域部署的bean,每一次请求(将其注入到另一个bean中,或者以程序的方式调用容器的 getBean()方法)都会产生一个新的bean实例
    • request
      request表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效
    • session
      session作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效
    • global session
      global session作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义。
  4. Spring 框架中常见的设计模式
    -简单工厂
    -工厂方法
    -单例模式
    -适配器模式
    -包装器模式
    -代理模式
    -观察者模式
    -策略模式
    -模板方法

Spring IoC容器

Spring容器提供 Spring 框架的基本功能,是工厂模式的实现。换句话说,Spring就是Bean的工厂,管理Bean的生命周期。下图为Spring 框架中常用容器的继承关系图:这里写图片描述

Spring 容器可分为两条主要设计路线:
1. BeanFactory

BeanFactory 是IoC容器的基础接口,BeanFactory提供了最基本的IoC容器的功能,即所有的容器至少需要实现的标准。体系继承关系如下:
这里写图片描述
DefaultListableBeanFactory 是Spring IoC容器最核心的实现,包含了基本IOC容器所具有的所有重要功能,是一个完整的IOC容器。BeanFactory 有三个子类接口:ListableBeanFactory(列出工厂可以生产的所有实例)、HierarchicalBeanFactory (使BeanFactory有了双亲Factory)和AutowireCapableBeanFactory(管理ApplicationContext之外的Bean)

2. ApplicationContext

在ApplicationContext的设计中,一方面,可以看到它继承了BeanFactory接口体系中的ListableBeanFactory、AutowireCapableBeanFactory、HierarchicalBeanFactory等BeanFactory的接口,具备了BeanFactory Ioc容器的基本功能(通过适配器模式适配到BeanFactory);另一方面,通过继承MessageSource、ResourceLoader、ApplicationEventPublisher这些接口,为ApplicationContext赋予了更高级的Ioc容器特性。对于ApplicationContext而言,为了在Web环境中使用它,还设计了WebApplicationContext接口。体系结构:这里写图片描述
ApplicationContext常见的几种实现:
- FileSystemXmlApplicationContext:这个方法是从文件绝对路径加载配置文件
- ClassPathXmlApplicationContext:这个方法是从classpath下加载配置文件(适合于相对路径方式加载)
- XmlWebApplicationContext:专为web工程定制的方法,推荐Web项目中使用
- AnnotationConfigApplicationContext:SpringBoot 非WEB项目使用
- AnnotationConfigEmbeddedWebApplicationContext:SpringBoot WEB项目中使用

Spring IoC容器结构

Spring IoC容器的作用主要是创建并管理Spring Bean对象以及Bean属性注入。Spring 容器通过ResourceLoader/Resolver读取Bean的配置文件并转换成统一资源对象(Resource),然后通过BeanDefinitionReader 转换成pring内部对Bean的描述对象(BeanDefinition),然后,将其注册(BeanRegister)到容器中(BeanFactory),供以后转换成Bean对象使用。
Spring IoC容器主要包含以下六个组件:
- 资源组件:Resource,对资源文件的描述,不同资源文件如xml、properties文件等,格式不同,最终都将被ResourceLoader加载获得相应的Resource对象;
- 资源加载组件:ResourceLoader:加载xml、properties等各类格式文件,解析文件,并生成Resource对象。
- .Bean容器组件:BeanFactory体系:IoC容器的核心。
- Bean注册组件:SingletonBeanRegister/AliasRegister:将BeanDefinition对象注册到BeanFactory(BeanDefinition Map)中去。
- Bean描述组件:BeanDefinition体系,Spring内部对Bean描述的基本数据结构
- Bean构造组件:BeanDefinitionReader体系,读取Resource并将其数据转换成一个个BeanDefinition对象。

这些组件并不是互相独立的,而是相互联系形成一个极其复杂的类关系网,像ApplicationContext这种比较中层的对象而言,既是ResourceLoader组件,也是BeanFactory组件一部分,还有其他的,越底层其成分越复杂,功能对应的也越具体,其实质就是一个抽象到具体的过程,但这种抽象不是纯粹的抽象到具体,更掺杂有多种抽象的结合。

  1. 资源组件,Resource体系,信息的载体,如各类型的文件,二进制流数据都是资源,是Spring内部对资源的一种统一描述,整个体系类图网如下:这里写图片描述
  2. 资源加载组件,ResourceLoader/Resolver体系,负责资源的加载,这里的资源指的是xml、properties等文件资源,返回一个对应类型的Resource对象。这里写图片描述
  3. Bean描述组件,BeanDefinition体系,是对bean对象描述的基本数据结构。这里写图片描述
  4. Bean构造组件,BeanDefinitionReader体系,将Resource对象,转换成BeanDefinition对象,就是将内部资源数据转换成Spring Bean描述数据。就是将统一资源数据对象读取转换成相应内部对象。这里写图片描述
  5. 5.Bean注册组件,将BeanDefinition对象注册到BeanFactory中去。这里写图片描述
  6. Bean容器组件,整个IoC容器核心,所谓Bean容器,就是这里装着Bean对象以及所需要的各种数据。其中BeanFactory是纯粹的Bean容器,用来存储描述Bean,无关其他环境,而像ApplicationContext,也是Bean容器,但它和应用环境息息相关,所以被称为应用上下文(环境)更恰当,从图中也能看出来,ApplicationContext不仅有着BeanFactory“血统”,同时也继承了EnvironmentCapable、MessageSource、ApplicationEventPublisher,即扩展了其许多额外功能,而其实现类则是和具体应用相关了.这里写图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值