JavaEE Bean实例化——实例工厂实例化

版权声明:本文为博主原创文章,未经博主允许不得转载。 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"));

	}

}

执行程序后,控制台输出结果如图所示:

扫描二维码关注公众号,回复: 3302611 查看本文章

猜你喜欢

转载自blog.csdn.net/qq_40788630/article/details/82806752