本节主要对Bean创建核心接口进行说明
BeanFactory
职责:
负责生产和管理bean的一个简单工厂接口,是IOC容器的核心接口。
用于实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。
BeanFactory提供IOC容器规范,是原始接口,一般不再使用。
而是使用其派生接口ApplicationContext
的实现类管理IOC容器。
相对于BeanFactory
,其实现了其他接口功能:
接口 | 说明 | 具体使用 |
---|---|---|
EnvironmentCapable | 获取上下环境对象 | https://blog.csdn.net/u010900754/article/details/101784606 |
HierarchicalBeanFactory | 提供父工厂的访问功能 | https://blog.csdn.net/iteye_14104/article/details/82672514 |
MessageSource | 国际化消息支持 | https://blog.csdn.net/u010900754/article/details/101649482 |
ApplicationEventPublisher | 事件传播机制 | https://blog.csdn.net/u010900754/article/details/101479940 |
ResourcePatternResolver | 用于解析资源文件(通配符解析) | https://blog.csdn.net/weixin_39165515/article/details/77073612 |
ApplicationContext
主要实现类
- 注解方式:
AnnotationConfigApplicationContext
- xml配置方式:
ClassPathResource
、ClassPathXmlApplicationContext
、FileSystemXmlApplicationContext
FactoryBean
FactoryBean是一个提供定制实例化规范的接口。
主要对bean对象生成时进行拦截、代理、自定义属性赋值等方式增强实现,能够以简单工厂模式或装饰者模式生成工厂bean。
一般情况下,Spring通过反射机制利用的class属性指定实现类实例化Bean。
在某些情况下,实例化Bean过程比较复杂,如果按照传统的方式,则需要在中配置大量信息,配置方式的灵活性是受限的。
此时若采用编码的方式可能会得到一个简单的方案。而FactoryBean能够通过反射获取bean进行自定义属性赋值。
BeanFactory和FactoryBean的区别
BeanFactory,提供了IOC容器最基本的实现规范。
FactoryBean,提供了灵活方式进行bean实现化。
FactoryBean在IOC容器的基础上给Bean的实现加上了一个简单工厂模式和装饰模式,我们可以在getObject()方法中灵活配置。
区别:
BeanFactory是个Factory,也就是IOC容器或对象工厂,FactoryBean是个Bean。在Spring中,所有的Bean都是由BeanFactory(也就是IOC容器)来进行管理的。但对FactoryBean而言,这个Bean不是简单的Bean,而是一个能生产或者修饰对象生成的工厂Bean,它的实现与设计模式中的工厂模式和修饰器模式类似。
附录: