你可以为那些本身就是工厂的对象实现 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 实例本身。