BeanFacotry和FactoryBean的区别

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"));

}
}

输出结果:

原文地址:https://www.cnblogs.com/MichaelPL/p/11631808.html