BeanFactory
BeanFacotry是一个访问Spring容器的一个接口(或者说他就是Spring容器的接口),Spring中的所有的Bean都是由BeanFactory进行管理的。
我们常用的getBean就是BeanFactory的提供的方法。
FactoryBean
FacotryBean是Spring为我们提供的一个简便的实现工厂模式的一个接口,这个工厂由Spirng帮我们管理。
简单理解FactoryBean以Bean结尾,他实际也是一个Bean,但是和其他Bean不同的是这个Bean是由Spring帮我们实现了一个工厂模式。
这里需要注意:实现了FactoryBean的Bean根据name去getBean时,获取到的是getObject()返回的对象,如果要需要如果FactoryBean这个Bean,则需要在beanName前面加上&
测试代码如下
@Component("demoFactoryBean") public class DemoFactoryBean implements FactoryBean<Demo> { @Override public Demo getObject() throws Exception { return new Demo(); } @Override public Class<?> getObjectType() { return Demo.class; } }
public class TestDemo {
public static void main(String[] args) {
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MyConfig.class);
System.out.println(applicationContext.getBean("demoFactoryBean"));
System.out.println(applicationContext.getBean("&demoFactoryBean"));
}
}
输出结果: