工厂方法是比较常见,常用的一种设计模式。FactoryBean是Spring提供的一种Bean注入IOC容器的方式。
在做日常开发时,一般都会避免直接new对象,而且将new的操作丢给IOC容器,但对于第三方系统的集成,我们不太好直接丢给IOC容器,此时可以通过工厂模式, 提供一个工厂类来实例化具体的接口 实现类,这样,主体对象只需要依赖工厂类,具体使用的实现类有变更的话,只是变更工厂类,而主 体对象不需要做任何变动。 这是一种良好的设计思路。然后我们可以将此工厂对象通过@Component等注解,注入到IOC容器中,由Spring进行管理。
FactoryBean是Spring容器提供的一种可以扩展容器对象实例化逻辑的接口,请不要将其与容器名称BeanFactory相混淆。FactoryBean,其主语是Bean,定语为Factory,也就是说,它本身与其他注 册到容器的对象一样,只是一个Bean而已,只不过,这种类型的Bean本身就是生产对象的工厂 (Factory)。 当某些对象的实例化过程过于烦琐,通过XML配置过于复杂,使我们宁愿使用Java代码来完成这 个实例化过程的时候,或者,某些第三方库不能直接注册到Spring容器的时候,就可以实现org.springframework.beans.factory.FactoryBean
接口,给出自己的对象实例化逻辑代码。
以Mybatis集成到Spring为例,就使用到了FactoryBean将关键对象SqlSessionFactory、Mapper接口代理对象注入到了IOC容器中,由Spring来接管,使得我们可以通过简单的@Resource等装配机制拿到对应的实例对象。
在实现了FactoryBean接口的类中,我们可以自定义许多的逻辑,然后在注入到IOC容器中,这是很方便强大的功能。