FactoryMethod顾名思义就是工厂方法的意思,如果配置了工厂方法,那么spring就会通过这个工厂方法去实例化bean。
在xml配置文件中可以配置FactoryMethod,如果配置了FactoryMethod,在初始化bean对象的时候会直接调用FactoryMethod方法来实例化bean
public class RealDao {
public void test(){
System.out.println("RealDao");
}
}
注意工厂方法必须是static方法
public class TestDao {
public void test(){
System.out.println("TestDao");
}
// 工厂方法必须是static方法
// spring会直接调用这个方法来初始化bean
public static RealDao initFactoryMethod(){
return new RealDao();
}
}
public static void main(String[] args) {
AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(SpringConfig.class);
//可以看到拿到的是工厂方法返回的bean对象
RealDao testDao = (RealDao) annotationConfigApplicationContext.getBean("testDao");
testDao.test();
// RealDao
}
输出
RealDao
在spring源码中是在下面的位置判断bean是否配置了工厂方法并调用工厂方法
调用链如下
在配置类中@Bean注解的方法如果是static修饰的,那么这种bean的实例化就是通过FactoryMethod实现的。