BeanFactory 和 FactoryBean 是spring两大核心的基础规范
- BeanFactory是一个接口,该接口定义IoC容器基本功能,常见的实现类有DefaultListableBeanFactory、XmlBeanFactory、ApplicationContext。如果粗略的理解的话可以理解为BeanFactory就是我们的Ioc容器,我们所有的bean都是从BeanFactory中获取的
- FactoryBean是一个接口,也是一种bean,是从BeanFactory中获取到的bean,如果不看前缀Factory的话它就是一个Bean,比如CarBean,就是汽车Bean,没有什么特殊的,所以FactoryBean仅仅是一种Bean。当然只要是Bean就有自己的功能(面向对象基础),比如CarBean可能会有method,可能drive()驱动方法,parking()停车方法。这样我们用这种角度来理解FactoryBean会简单很多,前缀来看Factory,工厂的意思,根据我们常见的修饰模式、工厂模式能很快理解,这个Bean就是一个工厂Bean,这个Bean能提供修饰模式或者工厂模式。其实FactoryBean是spring AOP 功能实现的一个基础。(AOP其实是对bean进行代理——proxy)
- 总结,BeanFactory规范了Ioc基本,用来提供各种Bean。FactoryBean规范了代理类或者工厂类的获取,用来提供修饰Bean(AOP原理中描述了从一个BeanFactory中获取FactoryBean(ProxyFactoryBean),并利用这个FactoryBean获取我们要进行代理的类进行修饰,形成新的代理类,最终实现AOP功能)