后端——框架——容器框架——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小节

原文地址:https://www.cnblogs.com/rain144576/p/12272470.html