Spring 中的 FactoryBean

FactoryBean(通常情况下,bean无须自己实现工厂模式,Spring容器担任工厂 角色;但少数情况下,容器中的bean本身就是工厂,其作用是产生其它bean实例),作用是产生其他bean实例。通常情况下,这种bean没有什么特 别的要求,仅需要提供一个工厂方法,该方法用来返回其他bean实例。由工厂bean产生的其他bean实例,不再由Spring容器产生,因此与普通 bean的配置不同,不再需要提供class元素。

ProxyFactoryBean用于创建代理(根据Advisor生成的Bean,也就是TargetBean的代理)
我们的Advisor,PointCut等等,其最终目的都是为了创建这个代理。

public interface FactoryBean {
    Object getObject() throws Exception;
    Class getObjectType();
    boolean isSingleton();
}

getObject()返回Factory管理的对象,注意并不是Factory本身的实例。Factory管理的对象可以是singleton的,也可以是prototype的,所以此接口有了另一个方法boolean isSingleton()用于区别是返回哪一种对象。getObjectType()最主要的目的就是在不创建实例的情况下就能知道欲创建的对象的类型。

从BeanFactory的定义可以看出,BeanFactory除了获取bean的功能外,还有bean的Type,bean的是否singleton的等特性,此外,前面分析已可以知道,getBean()可以返回singleton或prototype类型的实例。正是为了统筹管理这些bean创建相关的各种特性,才诞生了FactoryBean类。FactoryBean类主要是bean创建方面的一个统筹的管理。这是BeanFactory和FactoryBean的关系。

你可能感兴趣的:(Spring 中的 FactoryBean)