Spring之ObjectFactory

Posted INEFFABLE LAND

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring之ObjectFactory相关的知识,希望对你有一定的参考价值。

AbstractBeanFactory中doGetBean方法里有一段拿到RootBeanDefinition后,实例化该bean的方法

// Create bean instance.
if (mbd.isSingleton()) {
    sharedInstance = getSingleton(beanName, new ObjectFactory<Object>() {
        @Override
        public Object getObject() throws BeansException {
            try {
                return createBean(beanName, mbd, args);
            }
            catch (BeansException ex) {
            // Explicitly remove instance from singleton cache: It might have been put there
            // eagerly by the creation process, to allow for circular reference resolution.
            // Also remove any beans that received a temporary reference to the bean.
            destroySingleton(beanName);
            throw ex;
            }
        }
        });
    bean = getObjectForBeanInstance(sharedInstance, name, beanName, mbd);
}

ObjectFactory是一个普通的对象工厂接口。在AbstractBeanFacotrydoGetBean部分的源码中,可以看到springObjectFactory的应用之一就是,
将创建对象的步骤封装到ObjectFactory中 交给自定义的Scope来选择是否需要创建对象来灵活的实现Scope

ObjectFactory

定义一个工厂,它可以在调用时返回一个对象实例(可能是共享的或独立的)。
这个接口通常用于封装泛型工厂,在每次调用时返回某个目标对象的新实例(原型)。
这个接口类似于FactoryBean,但是后者的实现通常被定义为BeanFactory中的SPI实例,而这个类的实现通常被定义为作为API(通过注入)提供给其他bean。
因此,getObject()方法有不同的异常处理行为

详情: https://blog.csdn.net/u012291108/article/details/51886269

以上是关于Spring之ObjectFactory的主要内容,如果未能解决你的问题,请参考以下文章

spring源码之bean加载(bean解析下篇)

Spring与Struts2的整合

spring整合struts2的两种方式区别

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

Spring boot:thymeleaf 没有正确渲染片段