版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40788630/article/details/82806752
还有一种实例化Bean的方式是采用是实例工厂,此种方式的工厂类中不再使用静态方法创建Bean实例,而是采用直接创建Bean实例的方式,同时在配置文件中,需要实例化的Bean也并不是通过ckass属性直接指向的实例化类,而是通过factory-bean属性指向配置的实例化工厂,然后使用factory-method属性确定使用工厂中的哪个方法,下面通过一个案例来演示实例化工厂方式的使用。
1、在chapter02项目的src目录下,创建一个com.itheima.instance.factory包,在包中创建一个Bean2类,不需添加任何方法:
package com.itheima.instance.factory;
public class Bean3 {
}
2、在com.itheima.instance.factory包中,创建工厂类MyBeanFactory,在类中使用默认无参构造方法输出“bean3工厂实例化中”语句,如下面代码所示:
package com.itheima.instance.factory;
public class MyBean3Factory {
public MyBean3Factory() {
System.out.println("bean3共厂实例化中");
}
//创建Bean3的实例化方法
public Bean3 createBean() {
return new Bean3();
}
}
3、在com.itheima.instance.factory包中,创建Spring配置文件beans3.xml,设置相关配置后如下面代码所示:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
<bean id="MyBean3Factory" class="com.itheima.instance.factory.MyBean3Factory" />
<bean id="bean3" factory-bean="MyBean3Factory" factory-method="createBean" />
</beans>
在上面的代码中,首先配置了一个工厂Bean,然后配置了需要实例化的Bean,在id为bean3的Bean中,使用factory-bean属性指向配置的实例工厂,该属性就是工厂Bean的id。使用factory-method来指向工厂中的createBean()方法。
4、在com.itheima.instance.factory包中,创建一个测试类InstanceTest3,来测试使用静态工厂方式是否能够实例化Bean,编辑后代码如下:
package com.itheima.instance.factory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class InstanceTest3 {
private static ApplicationContext beanlizi;
public static void main(String[] args) {
String xmlPath = "com/itheima/instance/factory/beans3.xml";
beanlizi = new ClassPathXmlApplicationContext(xmlPath);
System.out.println(beanlizi.getBean("bean3"));
}
}
执行程序后,控制台输出结果如图所示: