1.默认方式
2.静态工厂的方法
静态工厂方法执行流程:
1,找到对应的配置文件;
2,加载配置文件;
3,解析所有的bean元素;识别id和class属性;
4,如果bean元素只有factory-method属性,得到factory-method属性值;
5,使用class属性+factory-method使用反射创建对象实例:
Class.forName(class).getMethod(factory-method).invoke(null,null);
5,把id作为key,把实例作为value存到spring容器中;
6,getBean从容器中拿到创建好的对象的实例;
1)工厂方法
2)配置文件
注:通过静态工厂方法生成的bean,在配置文件中配置的时候,bean的类型一定要写工厂类,并且指定<bean>元素的factory-method属性,内容为要调用的工厂类中的方法
3.实体工厂方法
1)实体工厂
2)配置
注:配置实体工厂方法生成的bean首先要先配置一个工厂的实体对象,然后再配置我们需要的bean,其中设置factory-method和factory-bean属性,其中factory-bean的值设置了作为工厂的实体,factory-method设置了调用工厂的方法
4.继承Spring的FactoryBean接口
如果我们写的工厂类实现了FactoryBean接口,那么Spring就会自动的识别到我们这个类是一个工厂类,虽然我们在Spring配置文件中只配置的是工厂的类型,但是Spring知道,我们要的是这个工厂生产出来的对象
FactoryBean的执行流程:
1,找到对应的配置文件;
2,加载配置文件;
3,解析所有的bean元素;识别id和class属性;
4,通过反射得到对象的实例,Class.forName(class).newInstance();
5,if(bean instanceof FactoryBean){
FactoryBean factory=(FactoryBean)bean;
Object realBean=factory.getObject();
}
6,把id作为key,把实例(realBean)作为value存到spring容器中;
7,getBean从容器中拿到创建好的对象的实例;
1)配置文件
2)工厂类
3)测试类
4)测试结果
注意:这种写法需要实现spring的接口FactoryBean,并且要实现接口中的三个方法getObject()(创建bean),getObjectType()(返回创建出来的bean对象的类型),isSingleton()