Bean可以继承此接口。
getBean
的时候,BeanName如果以 &
开头,就直接返回此Bean
如果不是,就返回 getObject()
public interface FactoryBean<T> {
String OBJECT_TYPE_ATTRIBUTE = "factoryBeanObjectType";
@Nullable
T getObject() throws Exception;
@Nullable
Class<?> getObjectType();
default boolean isSingleton() {
return true;
}
}
继承了此接口的Bean,在getBean
时有特殊处理,流程如下:
app.getBean("FactoryBeanName");
或app.getBean("&FactoryBeanName");
public Object getBean(String name) throws BeansException {
assertBeanFactoryActive();
// 分析 .getBean(name)
return getBeanFactory().getBean(name);
}
AbstractBeanFactory.getBean();
public Object getBean(String name) throws BeansException {
// 分析 doGetBean