欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring学习之三种创建对象的方式

程序员文章站 2022-05-07 21:44:14
...

在面向对象的程序中,想要使用某个对象,就需要先实例化这个对象。在spring中也一样,想要使用容器中的bean,也需要实例化Bean。实例化Bean有三种方式:构造器实例化(也可以说是空参构造方式,此方式为重点,另外两种作为理解)、静态工厂方式实例化实例工厂方式实例化。下面分别回顾三种方式:

  1. 构造器实例化
    指的是spring容器通过Bean对应类中默认的无参构造方法来实例化Bean。下面通过案例来帮助理解。

创建一个Spring_Bean项目,创建一个constructor包,包下创建一个Bean1类。

package constructor;

public class Bean1 {

}

在constructor包下创建配置文件bean1.xml。在配置文件中定义一个id为bean1的Bean,并通过class属性指定对应的实现类为Bean1

<!-- 调用Bean1方法创建对象bean1 -->
<bean id="bean1" class="constructor.Bean1"></bean>

在Test包下创建一个测试类Demo.java,测试构造器能否实例化Bean。

package Test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import constructor.Bean1;

public class Demo {
@Test
	public void fun1() {
		//定义配置文件路径
		String xmlPath="constructor/bean1.xml";
		//ApplicationContext在加载配置文件时,对Bean进行实例化
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
		//从IOC中获取Bean实例
		Bean1 bean =(Bean1)applicationContext.getBean("bean1");
		System.out.println(bean);

	}

}

spring容器ApplicationContext加载配置容器时,Spring容器会通过id为bean1的实现类Bean1中的默认无参构造方法对Bean进行实例化。执行程序后,控制台输出如下:
Spring学习之三种创建对象的方式

  1. 静态工厂方式实例化
    该方式通过工厂里的静态方法实例化Bean。
    该方式和实例工厂方式的区别是:静态工厂方式在创建Bean之前不需要实例化工厂。下面通过案例来理解:
    创建一个static_factory包,包下创建一个Bean2类,同Bean1一样内容为空。再在该包下创建一个MyBean2Factory类,在MyBean2Factory中创建一个createBean的静态方法。如下:
package static_factory;

public class MyBean2Factory {
	//使用自己的工厂创建Bean2实例。
	//静态方法通过类名即可调用createBean()方法
	public static Bean2 createBean(){
		return new Bean2();
	}

}

在static_factory包下创建配置文件bean2.xml。在配置文件中定义一个id为bean2的Bean,并通过class属性指定对应的实现类为MyBean2Factory.由于这种方式配置Bean 后,Spring容器不知道哪个是所需要的工厂方法,所以增加factory-method属性来告诉Spring容器,其方法名为createBean。

<!-- 调用MyBean2Factory的createBean方法创建id为bean2的对象
	此处不需要实例化工厂,直接使用静态方法对Bean实例化
 -->
<bean id="bean2" class="static_factory.MyBean2Factory"
		factory-method="createBean"/>

在static_factory包下创建一个测试类Demo.java,测试构造器能否实例化Bean。

public class Demo {
@Test
	public void fun2() {
		//定义配置文件路径
		String xmlPath="static_factory/bean2.xml";
		//ApplicationContext在加载配置文件时,对Bean进行实例化
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
		//从IOC中获取Bean实例
		Bean2 bean =(Bean2)applicationContext.getBean("bean2");
		System.out.println(bean);

	}

}

运行结果如下:
Spring学习之三种创建对象的方式
3. 实例工厂方式实例化
该方法是通过工厂里的实例方法对Bean实例化。(需要创建对象去调用方法)该方法在创建Bean之前需要实例化工厂。具体通过以下实例来理解:
创建一个instance_factory包,包下创建一个Bean3类,同Bean1一样内容为空。再在该包下创建一个MyBean3Factory类,在MyBean3Factory中创建一个createBean的实例方法。如下:

package instance_factory;


public class MyBean3Factory {
	//使用创建Bean3实例。
		public Bean3 createBean(){
			return new Bean3();
		}

}

在instance_factory包下创建配置文件bean3.xml。实例工厂方式需要在创建Bean对象之前实例化工厂,因此应该先配置工厂,然后再配置需要实例化的Bean。在id为bean3的Bean中,使用factory-bean属性指向配置的实例工厂,该属性值就是工厂Bean的id。使用factory-method属性来确定使用工厂中的createBean()方法。

<!-- 配置工厂 -->
<bean id="myBean3Factory" class="instance_factory.MyBean3Factory"></bean>
<!-- 使用factory-bean属性指向配置的实例工厂,
	使用factory-method属性确定使用工厂中的哪个方法.
	调用MyBean3Factory对象的createBean方法创建名为bean3的对象放入容器
 -->
<bean id="bean3" 
	factory-bean="myBean3Factory"
	factory-method="createBean"/>

在instance_factory包下创建一个测试类Demo.java,测试构造器能否实例化Bean。

public class Demo {
@Test
	public void fun3() {
		//定义配置文件路径
		String xmlPath="instance_factory/bean3.xml";
		//ApplicationContext在加载配置文件时,对Bean进行实例化
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
		//从IOC中获取Bean实例
		Bean3 bean =(Bean3)applicationContext.getBean("bean3");
		System.out.println(bean);

	}

}

运行结果如下:
Spring学习之三种创建对象的方式
今天复习的内容如上。都说复习就像炒冷饭,越炒越香,在暑假的预习学习中一直卡在报错说找不到我的配置文件,今天复习的时候发现,原来是当时创建配置文件的方式不对,正确应该是New–>Spring Bean Configuration file。
Spring学习之三种创建对象的方式
再填入配置文件的文件名即可
Spring学习之三种创建对象的方式
2019.10.25 19:21

相关标签: Spring的学习总结