接下来讲解在创建bean过程,可能会提前创建,下面开始一个案例
定义一个类:BeforeInstantiation
定义一个拦截器
定义一个类,实现InstantiationAwareBeanPostProcessor接口
再来看下BeanPostProcessor接口,可以看到InstantiationAwareBeanPostProcessor接口是BeanPostProcessor的子接口,所以我们定义的类实现了5个方法
开始断点看源码:
我们知道BeanPostProcessor接口是在:下面图片所示:registerBeanPostProcessors()这里注册的
再继续执行:
从getBean->doGetBean
再到createBean方法
进入到关键方法了
进入实例化之前的方法
进入到自定义类的方法了
通过动态代码,创建了类的实例
继续执行实例化之后的方法
返回对象:
直接返回创建的对象,后面的doCreateBean就不会执行了
下面来讲下spring创建对象的方式
下面讲解通过supplier接口创建对象
先来看下接口,函数式编程接口,我们可以用Supplier来表示如何获取一个结果,在需要这个结果时调用get()函数,即可拿到这个结果
下面看一个案例
配置
下面断点看源码,创建实例
获取supplier接口
获取到接口
执行处理
进入到获取实例方法
产生了对象实例
最后我们来看:通过factoryMethod创建对象
准备一个案例:
测试类:
配置:
下面断点进入:
进入到静态工厂方法,创建person1对象
执行创建方法
直接返回对象