• 后端——框架——容器框架——spring_core——《官网》阅读笔记——第一章节9(对象)


    1、BeanPostProcessor

    在bean生命周期中介绍过此接口,它包含两个方法

    • postProcessBeforeInitialization触发的时机:before container initialization methods,在InitializingBean.afterPropertiesSet() 或 init方法之前。
    • postProcessAfterInitialization:bean初始化之后,bean销毁之前。

      beanPostProcessor生效,需要将接口的实现类注入到IOC容器中。配置文件方式下定义bean标签,必须在所有bean之前。注解方式下使用@Component注解即可,并把类所在的包添加到IOC扫描路径中。

    2、PropertyPlaceHolderConfigurer

    这个接口对应原著中的1.8.2,它主要负责将占位符替换为实际的值。默认情况下,它会在IOC容器中查找变量,顺序是

    1. 命令行参数,如果是Web项目,查找context-param和context-config
    2. JVM系统变量,操作系统变量
    3. 配置文件,例如spring.properties
    4. 自定义变量,自定义的Property文件。

      也可以直接在该类上配置Property文件和自定义变量,这样会改变查找的顺序。这些自定义变量和自定义Property文件具有最高优先级

    <bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
    	<!-- 引入自定义的jdbc配置文件 -->
        <property name="locations" value="classpath:resources/jdbc.properties"/>
        <!-- 自定义变量 -->
        <property name="properties">
            <value>message=Hello World</value>
        </property>
    </bean>
    

      也可以配置systemPropertiesMode指定变量的查找顺序。它的值有三种

    1. Never(0):忽略系统变量,不在查找JVM系统变量和操作系统变量
    2. Fallback(1):先查找配置文件,之后查找系统环境变量。默认值
    3. Override(2):先查找系统环境变量,后查找配置文件。
    <bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
    	<!-- 配置systemPropertiesMode属性 -->
    	<property name="systemPropertiesMode" value="1">
    </bean>
    

      它的功能类似@PropertySource注解,在IOC容器中引入Property变量。

    3、PropertyOverrideConfigurer

    与PropertyPlaceHolderConfigurer功能类似,唯一区别是前者找到变量即返回,后者找到变量之后继续查找,后续的同名变量会覆盖之前的变量。

    4、FactoryBean

      这个接口对应原著中的1.8.3小节,它主要负责创建对象的具体逻辑。包含三个方法

    1. getObject:返回被创建的对象
    2. isSingleton:创建bean的作用域是否是singleton,是返回true,否返回false。
    3. getObjectType:返回被创建对象的类型,方法的返回值为Class。

    5、BeanFactory

      在介绍applicationContext接口时,它抽象的代表IOC容器,它本身并不提供任何的功能,所有的功能都是委托给它继承的接口,例如加载资源文件是ResourcePatternResolver,国际化是MessageSource,发布事件是ApplicationEventPublisher,核心功能bean的注入,配置,获取等功能是BeanFactory。

      applicationContext实现了BeanFactory其中两个子接口ListableBeanFactory和HierarchicalBeanFactory。

      其中ListableBeanFacotry代表bean的容器,获取bean,查询bean是否存在,统计bean的数量等等都在此接口中定义,

      HierarchicalBeanFactory代表容器的树形结构,即IOC容器也有父容器,子容器等概念。

      applicationContext整合了许多接口的功能。原著中BeanFactory与applicationContext的对比。

    功能描述

    BeanFactory

    applicationContext

    实体类的自动注入和创建

    管理实体类的生命周期

    自动注入BeanPostProcessor

    BeanFactoryPostProcessor

    支持国际化

    事件发布机制

      在原著的最后介绍如果没有applicationContext,如何使用BeanFactory实现IOC容器的功能,可以看到其实较为繁琐。具体参考1.16小节

  • 相关阅读:
    Openstack Swift 添加和删除 custom metadata name,通过 libcurl
    Windows Error Reporting, Mini dump 2, Full dump 1
    英语邮件结尾时常用的20个句子
    QT 编译时 Warning: The name 'layoutWidget' (QWidget) is already in use, defaulting to 'layoutWidget1'.
    QVBoxLayout 不能移动
    学生管理系统
    使用python发送邮件
    ElasticSearch 基础 2
    ElasticSearch 基础 1
    Linux系统命令
  • 原文地址:https://www.cnblogs.com/rain144576/p/12272470.html
Copyright © 2020-2023  润新知