spring注入bean的方式-12

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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值