ObjectFactory学习

简介

在Spring框架中,ObjectFactory是一个功能接口,它定义了一个简单的方法来获取对象的实例。ObjectFactory接口通常用于工厂模式和依赖注入中,允许延迟对象创建和配置,以及在运行时动态地决定要返回的对象实例。

源码

@FunctionalInterface
public interface ObjectFactory<T> {

	/**
	 * 这个接口类似于FactoryBean,但是FactoryBean的实现通常被定义为BeanFactory中的SPI实例,
	 而ObjectFactory的实现通常被定义为作为API(通过注入)提供给其他bean。
	 接口只有一个方法 getObject(),方法没有参数,像是一个函数式接口;
	 接口定义是一个对象工厂,对象的创建方式完全由调用方或者子类实现。
	 */
	T getObject() throws BeansException;
    /**
    其实匿名对象也是子类实现一种.
实现类有RequestObjectFactory,ResponseObjectFactory等实现。他们都有个共同的特点,就是通过BeanFactory的registerResolvableDependency()注册依赖的实例到beanFactory。但是只是声明依赖关系,并没有把实例的生命周期交由beanFactory进行管理.
    */
void registerResolvableDependency(Class<?> dependencyType, Object autowiredValue);
    /**
    即声明了Class类型依赖的实例是autowiredValue,autowired可以是真实实例,也可以ObjectFactory。这样,BeanFactory遇到Class类型时就不用再自己创建实例,直接使用autowired注入就行。和普通bean实例的最大区别是beanFactory不维护autowired实例的生命周期,由beanFactory外部维护. 对于ServletRequest实例来说,如果使用tomcat,那么ServletRequest的生命周期就由tomcat维护。
像这种由spring容器外部维护的实例,但容器又想使用依赖注入实现注入,就可以用以上这种方式实现。
    */
}

示例

import org.springframework.beans.factory.ObjectFactory;  
import org.springframework.context.ApplicationContext;  
import org.springframework.context.support.ClassPathXmlApplicationContext;  
  
public class ObjectFactoryExample {  
  
    public static void main(String[] args) {  
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");  
  
        ObjectFactory<MyBean> myBeanObjectFactory = context.getBean("myBeanObjectFactory", ObjectFactory.class);  
        MyBean myBean = myBeanObjectFactory.getObject();  
  
        myBean.doSomething();  
    }  
}  
  
class MyBean {  
    public void doSomething() {  
        System.out.println("Doing something in MyBean");  
    }  
}

在这个例子中,我们假设在applicationContext.xml配置文件中有一个名为myBeanObjectFactory的FactoryBean定义,它返回MyBean类型的ObjectFactory。然后,我们通过ApplicationContext获取这个ObjectFactory,并使用它来创建MyBean的实例。

请注意,在实际的Spring应用中,直接使用ObjectFactory的情况并不多见,它更多地是作为内部机制的一部分,用于支持更复杂的Bean生命周期和依赖管理功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值