org.springframework.beans.factory
FactoryBean

- 可以为本身就是工厂的对象实现
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。
FactoryBean 概念和接口在 Spring Framework 中的许多地方使用。 FactoryBean 接口的 50 多个实现随 Spring 本身一起提供。
当您需要向容器询问实际的 FactoryBean 实例本身而不是它生成的 bean 时,在调用 ApplicationContext 的 getBean() 方法时,在 bean 的 id 前加上符号 (&)。
因此,对于给定的 id 为 myBean 的 FactoryBean,在容器上调用 getBean("myBean") 会返回 FactoryBean 的产品,而调用 getBean("&myBean") 会返回 FactoryBean 实例本身。
Example:
package cn.pickle;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @author Pickle
* @version V1.0
* @date 2022/12/16 22:46
*/
public class Demo1 {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
final Object sqlSessionFactory = ctx.getBean("sqlSessionFactory");
final Object sqlSessionFactoryBean = ctx.getBean("&sqlSessionFactory");
System.out.println(sqlSessionFactory.toString());
System.out.println(sqlSessionFactoryBean.toString());
}
}
控制台输出

浙公网安备 33010602011771号