Spring容器核心类

  1. BeanFactory为Spring的IoC容器提供了基础功能。它主要被用于与Spring其他部分以及相关的第三方框架集成,并且它的子类实现DefaultListableBeanFactory是更高级别的GenericApplicationContext容器中的关键委托。

    Spring Bean的创建是典型的工厂模式,这一系列的Bean工厂(即IoC容器)为开发者管理对象的依赖关系提供了很多便利,在Spring中有许多的IoC容器实现供用户选择和使用,其相互关系如下:

    DefaultListableBeanFactory是Bean加载的最核心部分,也是Spring注册及管理加载Bean的默认实现。DefaultListableBeanFactory继承自AbstractAutowireCapableBeanFactory并实现了ConfigurableListableBeanFactory以及BeanDefinitionRegistry接口。下面是DefaultListableBeanFactory继承关系图:

    类图中的类作用描述如下:

    AliasRegistry

    定义对alias的简单增删改查等操作

    BeanDefinitionRegistry

    向注册表中注册 BeanDefinition 实例,完成注册程

    SimpleAliasRegistry

    主要使用map作为alias的缓存,并对接口AliasRegistry进行实现

    SingletonBeanRegistry

    定义对单例的注册及获取

    BeanFactory

    定义获取Bean及各种属性

    DefaultSingletonBeanRegistry

    对接口SingletonBeanRegistry各函数的实现

    ListableBeanFactory

    根据各种条件获取Bean的列表

    HierarchicalBeanFactory

    继承BeanFactory,也就是在BeanFactory定义的功能的基础上增加了对parent BeanFactory的支持

    FactoryBeanRegistrySupport

    在DefaultSingletonBeanRegistry的基础上增加了对FactoryBean的处理功能

    ConfigurableBeanFactory

    提供配置Factory的各种方法

    AutowireCapableBeanFactory

    提供创建Bean、自动注入,初始化以及应用Bean的后处理器

    AbstractBeanFactory

    FactoryBeanRegistrySupport和ConfigurableBeanFactory功能的集合

    AbstractAutowireCapableBeanFactory

    综合AbstractBeanFactory并对接口AutowireCapableBeanFactory进行实现

    ConfigurableListableBeanFactory

    BeanFactory配置清单,指定忽略类型及接口等

    DefaultListableBeanFactory

    综合上面所有的功能

    2.ApplicationContext接口是由BeanFactory接口派生出来的,所以提供了BeanFactory的所有功能。除此之外,ApplicationContext还提供了如下功能:

            2.1通过MessageSource访问i18n消息。

            2.2通过ResourceLoader访问资源,如:URL和文件。

            2.3使用ApplicationEventPublisher接口,将事件发布到实现ApplicationListener接口的Bean。

            2.4加载多个(分层)上下文,从而允许每个上下文通过HierarchicalBeanFactory接口集中在一个特定层上。如:Web层。

    BeanFactory和ApplicationContext

    BeanFactory的核心概念就是Bean工厂,用于Bean生命周期的管理,而Applicationcontext除了具有BeanFactory的特性外,还包括消息国际化、资源访问、事件传播等功能。简而言之,BeanFactory提供了配置框架和基本功能,而ApplicationContext则添加了更多特定的功能。ApplicationContext是BeanFactory的完整超集。

    除非您有充分的理由,否则请使用ApplicationContext。因为ApplicationContext包含BeanFactory的所有功能,除非你需要完全控制Bean处理的方案。

    特点

    BeanFactory

    ApplicationContext

    Bean实例化/装配

    Yes

    Yes

    集成的生命周期管理

    No

    Yes

    自动注册 BeanPostProcessor

    No

    Yes

    自动注册BeanFactoryPostProcessor

    No

    Yes

    便利的 MessageSource访问

    No

    Yes

    内置的ApplicationEvent发布机制

    No

    Yes

    3.BeanDefinition

    Spring IoC容器管理一个或多个Bean。这些Bean是根据程序提供给容器的配置元数据创建的,如:以XML <bean />格式的定义。而在容器内部,这些Bean需要表示为BeanDefinition对象,也就是有一个将Bean解析成Spring内部的BeanDefinition对象的过程。BeanDefinition包含以下元数据信息:

            一个全限定的类名

            用于声明Bean在容器中的行为信息(作用域,生命周期回调等)。

            要完成自身工作需要引用其他的Bean,这些引用也称为依赖项。

            要在新创建的对象中设置的其他配置,如:用于管理连接池的连接数,或池的大小限制。

    这些元数据构成每个BeanDefinition的一组属性:

            class

            name:Bean在容器内的唯一标识符。基于XML的配置,可以使用id或name属来指定Bean标识符

            scope:Bean的作用域

            constructor arguments:构造函数的参数

            properties:Bean包含的属性(依赖注入项)

            autowiring mode:自动装配模式

            lazy-initialization mode:延迟加载方法

            initialization method:初始化方法

            destruction method:销毁方法

    BeanDefinition继承了AttributeAccessor和BeanMetadataElement接口:

            AttributeAccessor:提供了访问属性的能力

            BeanMetadataElement:用来获取元数据元素的配置源对象

    BeanDefinition常见实现类

            ChildBeanDefinition

            RootBeanDefinition

            GenericBeanDefinition

            AnnotatedGenericBeanDefinition

            ScannedGenericBeanDefinition

    4.XMLBeanDefinitionReader
    XML配置文件的读取时Spring的重要功能,因为Spring的大部分功能都是以配置作为切入点的。 

    BeanDefinitionReader

    主要定义资源文件读取并转换为BeanDefinition的各个功能

    EnvironmentCapable

    定义获取Environment方法

    DocumentLoader

    定义从资源文件加载到转换为Document的功能

    AbstractBeanDefinitionReader

    对EnvironmentCapable、BeanDefinitionReader类定义的功能进行实现

    BeanDefinitionDocumentReader

    定义读取Document并注册BeanDefiniton功能

    BeanDefinitionParserDelegate

    定义解析Element的各种方法

     

    在XmlBeanDifinitonReader中主要包含以下几个步骤的处理:

            通过继承自AbstractBeanDefinitionReader中的方法,来使用ResourceLoader将资源文件路径转换为对应的Resource文件。

            通过DocumentLoader对Resource文件进行转换,将Resource文件转换为Document文件。

            通过实现接口BeanDefinitionDocumentReader的DefaultBeanDefinitionDocumentReader类对Document进行解析,并使用BeanDefinitionParserDelegate对Element进行解析。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring核心容器Spring框架中最核心的部分,提供了管理和组织应用程序中组件的功能。它包含了一系列的模块,如文本、图片等各种资源文件,同时提供了应用程序所需的各种组件,如BeanFactory、ApplicationContext等。 首先,Spring核心容器提供了BeanFactory接口,用于对Java对象(也即Bean)进行管理和配置的工厂。通过配置文件或注解的方式,我们可以定义Bean的属性和依赖关系,从而使用容器来获取已经创建好的Bean实例。BeanFactory接口负责创建和管理这些Bean,同时也负责销毁它们。 其次,Spring核心容器还提供了ApplicationContext接口,它是BeanFactory的子接口,提供了更多的功能。ApplicationContext可以从多种来源(比如文件系统、数据库、网络等)加载配置信息,并管理Bean的生命周期。除了BeanFactory的所有功能,ApplicationContext还支持国际化、事件发布、资源管理等更高级的功能。 另外,Spring核心容器还包括了一些辅助模块,如AOP(面向切面编程)、ORM(对象关系映射)等。这些模块可以与核心容器无缝集成,提供更强大、更灵活的功能。例如,通过AOP,我们可以在不修改原有代码的情况下,为应用程序添加事务、日志等横切关注点。而通过ORM,我们可以方便地将Java对象映射到数据库中的表。 总结来说,Spring核心容器Spring框架最为重要的组成部分,它提供了BeanFactory和ApplicationContext两个接口,用于管理和组织应用程序中的组件。同时,它还包括了一些辅助模块,如AOP和ORM,以提供更多的功能支持。使用Spring核心容器,我们可以简化应用程序的开发、配置和管理,提高代码的可重用性和可维护性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值