BeanFactory
package org.springframework.beans.factory;
import org.springframework.beans.BeansException;
import org.springframework.core.ResolvableType;
import org.springframework.lang.Nullable;
public interface BeanFactory {
String FACTORY_BEAN_PREFIX = "&";
Object getBean(String name) throws BeansException;
<T> T getBean(String name, Class<T> requiredType) throws BeansException;
Object getBean(String name, Object... args) throws BeansException;
<T> T getBean(Class<T> requiredType) throws BeansException;
<T> T getBean(Class<T> requiredType, Object... args) throws BeansException;
<T> ObjectProvider<T> getBeanProvider(Class<T> requiredType);
<T> ObjectProvider<T> getBeanProvider(ResolvableType requiredType);
boolean containsBean(String name);
boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;
boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException;
@Nullable
Class<?> getType(String name) throws NoSuchBeanDefinitionException;
@Nullable
Class<?> getType(String name, boolean allowFactoryBeanInit) throws NoSuchBeanDefinitionException;
String[] getAliases(String name);
}
- String FACTORY_BEAN_PREFIX = “&”;
String FACTORY_BEAN_PREFIX = “&”; 这句代码定义在 BeanFactory 这个最顶级的接口中。他的作用是如果在应用 beanName 获取 Bean 时,在 BeanName 前增加这个前缀,那么应用这个 BeanName 取得的 Bean 实例是其所在 FactoryBean 的实例,也就是实现 FactoryBean 接口的那个类的 Bean 实例。
- Object getBean(String name) throws BeansException;
通过 Bean 名称获取 Bean
- <T> T getBean(String name, Class<T> requiredType) throws BeansException;
依据名称和类型获取 Bean
- Object getBean(String name, Object… args) throws BeansException;
通过 name 和对象参数获取 Bean
- <T> T getBean(Class<T> requiredType) throws BeansException;
通过类型获取 Bean
- <T> T getBean(Class<T> requiredType, Object… args) throws BeansException;
通过类型和参数获取 Bean
- <T> ObjectProvider<T> getBeanProvider(Class<T> requiredType);
返回指定 ObjectProvider,提供提早加载性能
- <T> ObjectProvider<T> getBeanProvider(ResolvableType requiredType);
Class,Field,Method 类型的提早加载性能
- boolean containsBean(String name);
容器中是否蕴含名字为 name 的 Bean
- boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
Bean 是否是单例
- boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
判断 bean 是不是原型
- boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;
查看具备给定名称的 bean 是否与指定的类型 (Class,Field,Method 类型) 匹配。
- boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException;
查看具备给定名称的 bean 是否与指定的类型匹配。
- Class<?> getType(String name) throws NoSuchBeanDefinitionException;
确定具备给定名称的 bean 的类型
- Class<?> getType(String name, boolean allowFactoryBeanInit) throws NoSuchBeanDefinitionException;
确定具备给定名称的 bean 的类型
- String[] getAliases(String name);
返回给定 bean 名称的别名
ObjectFactory
package javax.naming.spi;
import java.util.Hashtable;
import javax.naming.*;
public interface ObjectFactory {
// 为指定对象和环境创立一个对象实例
public Object getObjectInstance(Object obj, Name name, Context nameCtx,
Hashtable<?,?> environment)
throws Exception;
}
相同点
BeanFactory 和 ObjectFactory 都提供依赖查找的能力
区别
- BeanFactory 实现了 ObjectFactory 接口
- ObjectFactory 仅仅关注一个或者一种类型 Bean 的查找, 并且本身不具备依赖查找的能力.
- BeanFactory 则提供繁多类型, 汇合类型和层次性的依赖查找能力.
原文: https://rumenz.com/rumenbiji/Spring-BeanFactory-ObjectFactory.html