在java中,BeanFactory和FactoryBean这两个接口经常被混淆,那它们两个的关系到底是怎么样的呢?它们又有什么区别呢?下面就来了解一下吧。
一、BeanFactory
BeanFactory接口:它是IoC容器的顶级接口,是IoC容器的底层基础实现,也是访问Spring容器的根接口,负责对bean的创建,访问等工作。
结构视图如下:
二、FactoryBean
FactoryBean接口:它是一个可以返回bean的实例的工厂bean,实现这个接口可以对bean进行一些额外的操作,例如根据不同的配置类型返回不同类型的bean,简化xml配置等。
它在使用上也有些特殊,BeanFactory接口中有一个字符常量String FACTORY_BEAN_PREFIX = "&"; 当我们去获取BeanFactory类型的bean时,如果beanName不加&则获取到对应bean的实例;如果beanName加上&,则获取到BeanFactory本身的实例。
/** * Interface to be implemented by objects used within a {@link BeanFactory} which * are themselves factories for individual objects. If a bean implements this * interface, it is used as a factory for an object to expose, not directly as a * bean instance that will be exposed itself. * * NB: A bean that implements this interface cannot be used as a normal bean. * A FactoryBean is defined in a bean style, but the object exposed for bean * references ({@link #getObject()}) is always the object that it creates.
如上:在一个spring配置文件中配置了名字为 myFcBean 的一个类型,该类型是 FactoryBean 的实现类。那么通过BeanFactory.getBean(“myFcBean”) 返回的就并不是这个类型本身的对象,而是调用这个对象的getObject方法的返回值。
结构视图如下:
区别:BeanFactory是个Factory,也就是IOC容器或对象工厂,而FactoryBean就是个Bean。在Spring中,所有的Bean都是由BeanFactory(也就是IOC容器)来进行管理的。但对FactoryBean而言,这个Bean不是简单的Bean,而是一个能生产或者修饰对象生成的工厂Bean,它的实现与设计模式中的工厂模式和修饰器模式类似。
以上就是关于beanfactory和factorybean之间区别的所有内容了,想知道更多有关java常见问答知识的相关内容,就请持续关注了解我们的网站吧。