bc0cab0554bdde7641bca8165840811.png
    首先,spring一启动就会去扫描包下的所有类,去查找需要被spring容器所管理的bean,在实例化前,有一个接口叫做BeanFactoryPostProcessor,这个接口可以理解成处理器或者是增强器,他的作用是可以修改bean的定义属性,我们都知道beanDefinition,bd就是bean的定义,包括属性值、构造方法参数值以及更多实现信息,也就是说beanfactorypostprocessor可以随意的修改bd,BeanFactoryPostProcessor是Spring初始化bean时对外暴露的扩展点,在之后就通过反射创建对象,这一步也叫实例化,实例化之后进行属性赋值也就是我们俗称的依赖注入(DI),在之后如果实现了aware方法,则执行,目的是为了bean可以获得spring 容器的服务,在之后也就是初始化之前会执行beanpostprocessor的前置方法,这也是对外的扩展点之一,然后进行初始化(init),之后beanpostprocessor还为我们提供了一个后置方法,至此bean已经可以自由使用了