BeanFactory 接口是spring 容器的灵魂,接口提供的方法如下:
Object getBean(String name) throws BeansException;
<T> T getBean(String name, Class<T> requiredType) throws BeansException;
<T> T getBean(Class<T> requiredType) throws BeansException;
Object getBean(String name, Object... args) throws BeansException;
<T> T getBean(Class<T> requiredType, Object... args) throws BeansException;
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;
Class<?> getType(String name) throws NoSuchBeanDefinitionException;
String[] getAliases(String name);
以getBean为名的和Type 相关的方法很容易推测其意思,那么 isSingleton 和 isPrototype 的作用是什么?
其实这两个互斥的方法描述了如何修饰了getBean 方法的行为。如果isSingleton,那么从容器中每次调用getBean方法,获取的都是同一个对象的实例,如果isPrototype,那么每次(直接或间接)调用getBean方法,获取的都是一个新创建的对象。