使用场景:
从Ioc容器中获取Bean(byName or byType)
检索Ioc容器中是否包含指定的Bean
判断Bean是否为单例
FactoryBean是个Bean,这个Bean不是简单的Bean,而是一个能生产或者修饰对象生成的工厂Bean,它的实现与设计模式中的工厂模式和修饰器模式类似。
使用场景
ProxyFactoryBean
BeanFactory和FactoryBean区别
他们两个都是 创建bean对象的
BeanFactory:提供了类似模板的方法,根据模板方法实现具体的bean创建
FactoryBean:则是提供了定制化的 ,独特的,与众不同的Bean创建,你可以根据自己的方式创建bean,最后通过FactoryBean中的getObject获取你定制化实现的bean
FactoryBean里面有三个方法:目的是为了做扩展,Spring Cloud 用到了FactoryBean如(FeignClientFactoryBean),feign实现了FactoryBean,getObject可以获取
相同:
Spring提供了两种不同的IOC 容器,一个是BeanFactory,另外一个是ApplicationContext,它们都是Java interface,ApplicationContext继承于BeanFactory(ApplicationContext继承ListableBeanFactory。
它们都可以用来配置XML属性,也支持属性的自动注入。
而ListableBeanFactory继承BeanFactory),BeanFactory 和 ApplicationContext 都提供了一种方式,使用getBean("bean name")获取bean。
不同:
当你调用getBean()方法时,BeanFactory仅实例化bean,而ApplicationContext 在启动容器的时候实例化单例bean,不会等待调用getBean()方法时再实例化。
BeanFactory不支持国际化,即i18n,但ApplicationContext提供了对它的支持。
BeanFactory与ApplicationContext之间的另一个区别是能够将事件发布到注册为监听器的bean。
BeanFactory 的一个核心实现是XMLBeanFactory 而ApplicationContext 的一个核心实现是ClassPathXmlApplicationContext,Web容器的环境我们使用WebApplicationContext并且增加了getServletContext 方法。
如果使用自动注入并使用BeanFactory,则需要使用API注册AutoWiredBeanPostProcessor,如果使用ApplicationContext,则可以使用XML进行配置。
简而言之,BeanFactory提供基本的IOC和DI功能,而ApplicationContext提供高级功能,BeanFactory可用于测试和非生产使用,但ApplicationContext是功能更丰富的容器实现,应该优于BeanFactory
pdf 98页
原文:https://www.cnblogs.com/fanBlog/p/12851433.html