今天早上抽空看来一下spring依赖注入的源码,在这里记录一下它的调用流程吧
依赖注入实现原理
实质上就是new一个对象,并给其属性赋值(setter注入和构造器注入)
那么落实到spring是怎么实现的呢?
首先它是先调用getBean方法, 然后getBean又调用了doGetBean方法,然后在其中调用了createBean方法,创建过程后委托给了doCreateBean。所以实际上最重要的方法就是doCreateBean。
在doCreateBean有两个方法(1)createBeanInstance,作用是生成Java对象。(2)populateBean完成注入。
在createBeanInstance中创建对象的方式有两种,BeanUtil和Cglib,前者是又java反射实现的,后者是对字节码加强的一种方式。
在populateBean中调用appPropertyValues中进行注入,获取BeanDefinition中的属性信息然后给属性赋值。这样一个依赖注入的过程就完成了。
不过如果让我设计我肯定不会写成这样,它弄了好多抽象类和接口,工厂模式用的飞起...毕竟是大牛