beanDefinition api注入容器
AnnotationConfigApplicationContext acx =new AnnotationConfigApplicationContext(); AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition().getBeanDefinition(); beanDefinition.setBeanClass(User.class); MutablePropertyValues propertyValues = beanDefinition.getPropertyValues(); propertyValues.add("name","dk"); acx.registerBeanDefinition("u",beanDefinition); acx.refresh(); System.out.println(acx.getBean(User.class).getName());
//===============================factorybean形式注入容器 AnnotationConfigApplicationContext acx =new AnnotationConfigApplicationContext(); AbstractBeanDefinition beanDefinition1 = BeanDefinitionBuilder.genericBeanDefinition().getBeanDefinition(); beanDefinition1.setBeanClass(DkFactoryBean.class); acx.registerBeanDefinition("dk",beanDefinition1); acx.refresh(); System.out.println(acx.getBean("&dk")); System.out.println(acx.getBean("dk"));
System.out.println(acx.getBean("&dk"));
250 Object sharedInstance = getSingleton(beanName);
261 bean = getObjectForBeanInstance(sharedInstance, name, beanName, null);
1793 if (BeanFactoryUtils.isFactoryDereference(name)) {
1818 object = getCachedObjectForFactoryBean(beanName);
1824 // Caches object obtained from FactoryBean if it is a singleton. if (mbd == null && containsBeanDefinition(beanName)) { mbd = getMergedLocalBeanDefinition(beanName); }
// synthetic=false 1827 boolean synthetic = (mbd != null && mbd.isSynthetic()); object = getObjectFromFactoryBean(factory, beanName, !synthetic);
101 从factorybean获取bean object = doGetObjectFromFactoryBean(factory, beanName);
169 终于获取到了bean object = factory.getObject();
=====================registerBean
acx.registerBean("u1",User.class);
423 registerBean(beanName, beanClass, null, customizers);
233 doRegisterBean(beanClass, name, null, supplier, customizers);
285 BeanDefinitionReaderUtils.registerBeanDefinition(definitionHolder, this.registry);