IOC

  • 依赖注入 换言之通常我们需要一个对象时会new 但是,spring 会替你做这个事情
  • 对于spring 来说会维护ioc容器 用来存放对象(也叫spring bean),当需要获取对象实例时会从容器中获取。
  • 以下是一个最原始加载bean的方法
ClassPathXmlApplicationContext cpx = new ClassPathXmlApplicationContext();
XXX bean = (XXX)cpx.getBean("XXX.class");
  • 以下是spring 创建一个spring-bean的流程
    image-1658500982286
  • 所有的bean 会保存在ioc 容器中,ioc容器会是一个map 如下图所示
    image-1658502115822

BeanDefinition

  • BeanDefinition 是spring的一个接口, 指的是bean里的一些信息,比如我这个bean的类型,bean的别名等等。
    image-1658572955248
  • BeanDefinitionReader 也是一个抽象类,将各种类型的数据转换为BeanDefinition,如xml,properties
  • 如下图所示
    image-1658573148483

bean的生命周期

  • spring 会通过反射创建spring-bean
  • DefaultListableBeanFactory是spring 默认bean 工厂的实现 (它实现自BeanFactory接口)

beanfactory和factorybean的区别

image-1658574084972

初始化之设置aware接口属性

  • aware 接口感知类
  • spring 中存在非常多的实现aware 接口的类 比如 BeanNameAware (用你的bean 实现对应的接口),让你的bean 得到更多的能力,如实现了BeanNameAware 则可以获取到bean的名称。
  • 实现其他类也可以获得更多的参数。

PostProcessor(后置增强器)

image-1658574820011

  • BeanFactoryPostProcessor是用来在bean 创建时动态改变bean里的值/属性的。
  • 应用场景: 如你需要动态加载jdbc 配置,redis 配置等 ,spring 就是使用BeanFactoryPostProcessor 实现的。
  • 如图所示PostProcessor对同一个bean 可以强化多次。
  • BeanFactoryPostProcessor 设置的配置属性 如设置bean 懒加载等。
  • BeanPostProcessor 修改的是我们定义的spring-bean里的属性。
  • 以下为BeanPostProcessor 的接口定义对应上图的before 和 after。
public interface BeanPostProcessor {

	/**
	 * 初始化方法调用前要进行的处理逻辑
	 */
	@Nullable
	default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
		return bean;
	}

	/**
	 * 在初始化方法指定后要进行的处理逻辑
	 */
	@Nullable
	default Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
		return bean;
	}
}

待续