在使用Spring的Ioc容器创建对象会使用到单例构造或多例构造;
单例构造:整个程序只有一个对象
多例构造:程序中有类实例的多个对象,对象之间互相独立
首先在Test包下面建立一个User类,源代码如下;
package com.lydetails.ssm.Test; public class User { private String name; private Integer age; public User() { System.out.println("User构造函数"); } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
然后在配置文件中配置bean,使用scope属性其值为"singleton",表示为单例
配置文件的源代码如下:
<?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.xsd"> <bean id="user" class="com.lydetails.ssm.Test.User" scope="singleton"></bean> </beans>
然后在测试类中进行测试:
package com.lydetails.ssm.Test; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class DemoTest { @Test //测试使用ioc容器的空参构造 public void func1() { //加载配置文件 ApplicationContext apl = new ClassPathXmlApplicationContext("ApplicationContext.xml"); User introduceDemo = (User) apl.getBean("user"); System.out.println(introduceDemo); } @Test //测试单例代码 public void func2() { //加载配置文件 ApplicationContext apl = new ClassPathXmlApplicationContext("ApplicationContext.xml"); User user1 = (User) apl.getBean("user"); User user2 = (User) apl.getBean("user"); User user3 = (User) apl.getBean("user"); System.out.println(user1==user3); } }
输出的结果如下:
接下来我们来构造多例模式:
其配置源文件如下所示,只是scrop的值发生改变
<?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.xsd"> <bean id="user" class="com.lydetails.ssm.Test.User" scope="prototype"></bean> </beans>
下面给出测试的源代码fun3
@Test //测试多例代码 public void func3() { //加载配置文件 ApplicationContext apl = new ClassPathXmlApplicationContext("ApplicationContext.xml"); User user1 = (User) apl.getBean("user"); User user2 = (User) apl.getBean("user"); User user3 = (User) apl.getBean("user"); System.out.println(user2==user3); }
结果如下所示:
产生了三个构造函数