ObjectFactory 与 BeanFactory 都提供查找实例的能力。
按照单词理解
- ObjectFactory 是对象的工厂
- BeanFactory 是 Bean 的工厂
ObjectFactory 接口通常用于封装一个通用的工厂。仅关注一个或一种类型的对象的生产(查找)。
ObjectFactoryCreatingFactoryBean 可以实现 Bean 的延迟加载;TargetBeanObjectFactory 是其静态内部类,实现了 ObjectFactory 接口,用于生产 targetBeanName 的 Bean 对象。
public class ObjectFactoryCreatingFactoryBean extends AbstractFactoryBean<ObjectFactory<Object>> {
//设置目标 Bean 名称
private String targetBeanName;
public void setTargetBeanName(String targetBeanName) {
this.targetBeanName = targetBeanName;
}
public void afterPropertiesSet() throws Exception {
Assert.hasText(this.targetBeanName, "Property 'targetBeanName' is required");
super.afterPropertiesSet();
}
public Class<?> getObjectType() {
return ObjectFactory.class;
}
//返回实现 ObjectFactory 的静态内部类 TargetBeanObjectFactory
protected ObjectFactory<Object> createInstance() {
return new TargetBeanObjectFactory(getBeanFactory(), this.targetBeanName);
}
private static class TargetBeanObjectFactory implements ObjectFactory<Object>, Serializable {
private final BeanFactory beanFactory;
private final String targetBeanName;
public TargetBeanObjectFactory(BeanFactory beanFactory, String targetBeanName) {
this.beanFactory = beanFactory;
this.targetBeanName = targetBeanName;
}
//生成对象的能力,来自于通过构造方法持有的 BeanFactory 对象
public Object getObject() throws BeansException {
return this.beanFactory.getBean(this.targetBeanName);
}
}
}
BeanFactory 提供了获取各种 Bean 的能力,不用多说了。
【Java学习资源】整理推荐
- 自定义 Bean 作用域
- Bean 的作用域
- maven 集成 tomcat 以 jar 的方式打包 web 应用
- Spring 依赖注入与依赖查找来源的区别
- Spring 依赖注入的处理过程与 DependencyDescriptor 的说明
- Spring 各种 Aware 接口回调注入
- Spring Bean 生命周期内的 Exception 复现
- Spring 内建 Bean
- Spring Bean 的别名
- Spring Bean 未指定名称的命名规则
- Bean 何时被 GC
- Spring Bean 延迟加载
- ObjectFactory 与 BeanFactory 的区别
- Bean 销毁的方式与顺序
- Bean 初始化的方式与顺序
- Bean 的实例化方式
- Bean的注册方式
- 什么是 BeanDefinition?
- Spring IoC 容器启动时做了什么?
- BeanFactory 与 FactoryBean 的区别
- BeanFactory 与 ApplicationContext 的区别
- Spring IoC 依赖注入的实现方式
- Spring IoC 依赖注入(支持哪些数据类型?)
- Spring bean 依赖查找
- Spring-IoC
- Spring 的核心特性