前言
不论是采用 XML 还是注解方式,最终 Spring 读取加载后都会生成与之对应的 BeanDefinition,然后利用它就可以去实例化一个对象。
BeanDefinition 用来描述创建一个实例所需要的信息
简单的看来创建一个对象其实就 2 步骤
- 读取类,然后根据注解或者 XML 配置文件,将其封装成 BeanDefinition
- 根据 BeanDefinition 包含的信息来实例化一个对象
Spring 就在这几个步骤中穿插逻辑,从而拓展出了一个生态,下面我们就来看看 AOP 的实现原理
示例代码
基本用法这里就不再赘述
装载 BeanDefinition
调用 BeanFactoryProcessor
在 new AnnotationConfigApplicationContext(Class<?>... componentClasses)
首先将 AppConfig
解析为 BeanDefinition
放入 BeanFactory
的 BeanDefinitionMap
中
然后调用 refresh()
方法中,会调用 invokeBeanFactoryPostProcessors(beanFactory);
在这个方法中去调用所有的 BeanFactoryProcessor
那么什么是 BeanFactoryProcessor
它又有什么作用呢?看下面这段代码
通过实现了 BeanFactoryProcessor
我们可以拿到 ConfigurableListableBeanFactory
&