目录
如何获取FactoryBean中getObject方法创建的Bean
BeanFactoryUtils#isFactoryDereference
FactoryBean接口
提供了三个方法
- 方法一:返回由工厂管理的Bean实例对象

- 方法二:返回Bean实例对象的类型

- 方法三:Bean是否为单例,默认为单例

通过FactoryBean创建Bean对象
- 定义一个普通的Java类
java
package spring.demo;
public class Cat {
}
- 定义一个组件实现FactoryBean接口
java
package spring.demo;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.stereotype.Component;
@Component
public class CatFactoryBean implements FactoryBean<Cat> {
@Override
public Cat getObject() throws Exception {
return new Cat();
}
@Override
public Class<?> getObjectType() {
return Cat.class;
}
@Override
public boolean isSingleton() {
return true;
}
}
如何获取FactoryBean中getObject方法创建的Bean
通过beanName获取
java
package spring.demo;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class AppMain {
public static void main(String[] args) {
// 容器启动
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfig.class);
// 通过beanName获取
Object bean = applicationContext.getBean("catFactoryBean");
System.out.println(bean);
}
}

如何获取FactoryBean本身
通过&+beanName获取
java
package spring.demo;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class AppMain {
public static void main(String[] args) {
// 容器启动
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfig.class);
// 通过&+beanName获取
Object bean = applicationContext.getBean("&catFactoryBean");
System.out.println(bean);
}
}

源码分析
beanDefinitionMap

singletonObjects

factoryBeanObjectCache

FACTORY_BEAN_PREFIX
BeanFactory

BeanFactoryUtils#isFactoryDereference

看看Spring自己是怎么获取FactoryBean对象
