你可以为那些本身就是工厂的对象实现 org.springframework.beans.factory.FactoryBean接口。

    FactoryBean 接口是 Spring IoC 容器实例化逻辑的一个可插入点。如果你有复杂的初始化代码,最好用 Java 来表达,而不是用(潜在的)冗长的 XML 来表达,你可以创建自己的 FactoryBean,将复杂的初始化写入该类中,然后将你的自定义 FactoryBean 插入容器中。

    FactoryBean<T> 接口提供三种方法:

    • T getObject()。返回本工厂创建的对象的一个实例。该实例可能会被共享,这取决于该工厂是返回单例还是多例。
    • boolean isSingleton()。如果这个 FactoryBean 返回单例,则返回 true,否则返回 false。这个方法的默认实现会返回 true。
    • Class<?> getObjectType()。返回由 getObject()方法返回的对象类型,如果事先不知道该类型,则返回 null。

    在 Spring 框架中,FactoryBean 的概念和接口在很多地方都有使用。Spring 本身就有有 50 多个 FactoryBean 接口的实现。

    当你需要向容器索取一个实际的 FactoryBean 实例而不是它产生的 Bean 时,在调用 ApplicationContext 的 getBean() 方法时,在 Bean 的 id 前加上 &符号。因此,对于一个 id 为 myBean 的FactoryBean,在容器上调用 getBean("myBean")会返回 FactoryBean 的产物,而调用getBean("&myBean")会返回 FactoryBean 实例本身。