BeanFactory就是一个Bean工厂,负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。
BeanFactory
只是个接口,并不是IOC容器的具体实现,但是Spring
容器给出了很多种实现,如 DefaultListableBeanFactory
、XmlBeanFactory
、ApplicationContext
等
FactoryBean实现了FactoryBean<T>
接口的bean,用户可以通过实现该接口定制实例化Bean的逻辑。
以Bean结尾,表示它是一个Bean,不同于普通Bean的是:它是实现了FactoryBean<T>
接口的Bean,根据该Bean的ID从BeanFactory
中获取的实际上是FactoryBean
的getObject()
返回的对象,而不是FactoryBean
本身,如果要获取FactoryBean对象,请在id前面加一个&符号来获取。
package org.springframework.beans.factory;
public interface FactoryBean<T> {
T getObject() throws Exception;
Class<?> getObjectType();
boolean isSingleton();
}
getObject()
:返回由FactoryBean
创建的Bean实例
isSingleton()
:返回由FactoryBean创建的Bean实例的作用域是singleton还是prototype;
如果isSingleton()返回true,则该实例会放到Spring容器中单实例缓存池中。
getObjectType()
:返回FactoryBean创建的Bean类型。
当配置文件中<bean>的class属性配置的实现类是FactoryBean时,通过getBean()方法返回的不是FactoryBean本身,而是FactoryBean#getObject()方法所返回的对象,相当于FactoryBean#getObject()代理了getBean()方法。
网友评论