
前言Spring中有BeanFactory接口也有FactoryBean接口。注意不要混淆两者。有关BeanFactory的内容请查看博主的另一篇文章:《Spring之BeanFactory详解》FactoryBean讲解首先先看其类的结构图:1.FactoryBean也是一个由Spring容器管理的类。所以其可以通过BeanFactory的getBean方法获得。所以FactoryBean与BeanFactory的关系就是管理与被管理的关系。2.FactoryBean字面意思是工厂Bean。它就是起到一个工厂的作用。其getObject()方法可以生产另外一个对象且生产的对象也交由Spring容器管理。3.FactoryBean不支持依赖注入因为FactoryBean的调用时机在Spring初始化的早期进行这时候还没有生成要依赖的对象。4.Spring容器只负责管理FactoryBean实例的生命周期而不管FactoryBean的getObject方法的生命周期所以不会自动调用getObject对象的close方法。如果有这种需求那么getObject方法返回的类需要实现DisposableBean接口。5.通过FactoryBean的实现类首字母小写获得的是getObject返回的对象。在首字母小写前面加一个符号获得的是FactoryBean实例本身。6.isSingleton方法如果返回true那么getObject方法每次返回的都是同一个对象如果返回false那么getObject方法每次返回不同的对象。7.这种方式定义的对象和其他方式定义对象交由Spring管理有何区别呢这种方法相当于是动态的定义Spring管理的Bean。我们用Component注解往Spring容器加入对象时这个对象是固定不变的而用FactroyBean的getObject定义对象时可以自定义。8.如果调用时该FactoryBean尚未完全初始化例如因为它涉及循环引用则抛出相应的FactoryBeanNotInitializedException。(甜点:遇到某个异常时可以从这个异常类的源码注释找报错原因)ListFactoryBean、MapFactoryBean、SetFactoryBeanSpring提供的这几个FactoryBean的实现类。用于在Spring的Bean中配置相应集合属性。在xml中进行配置。本质就是给Bean中的集合属性赋值。具体的使用方法可以参考用法现在很少使用xml配置了可以作为了解在特殊的业务场景下应用此技术。