spring 中bean的简单实现捏 测试类,先创建bean工厂,bean的定义(传入bean类型),注册bean。
测试:用getbean获取bean对象。调用bean方法查看是否打印
注册bean在bean工厂的实现类(DefaultListableBeanFactory)中用map作为bean容器,String作为键,BeanDefinition作为值(成员是bean的类型),注册时直接推进map中。
getbean去调用dogetbean(真正的实现在dogetbean,分开是为了重构函数)。
去获取单例bean,(此时返回为null)如果有,则直接返回。
没有则去取BeanDcefintion
(如果注册过则有beanDcefintion,否则没有)
这时候去带着beanDefintion去创建bean
在createBeanInstance中选择创建策略(根据构造函数的参数去创建)
在createBeanInstance中寻找合适的构造函数,然后进行创建。
Constructor[]中包含bean的所有构造方法。然后便利构造方法找到匹配的(这里简单地根据长度匹配)
找到传给其他函数后初始化。
用cglib进行创建。
之后返回到函数中,将其添加到单例容器中。并返回bean对象