Spring框架创建对象的方式 --- 空参构造

  • 1、空参构造创建实体类
    • 1.1、实体类
    • 1.2、核心配置文件
    • 1.3、测试类
    • 1.4运行结果
  • 2、静态工厂创建实体类
    • 1.1、实体类
    • 1.2、创建对象的静态工厂方法
    • 1.3、核心配置文件
    • 1.4、测试类
    • 1.5、运行结果
  • 3、实例工厂创建实体类
    • 3.1、实体类
    • 3.2、实例对象工厂
    • 3.3、核心配置文件
    • 3.4、测试方法
    • 3.5、运行结果
  • 《END》


1、空参构造创建实体类

1.1、实体类

User.java User实体类:

package com.java.entity;
public class User {
	public User() {
		System.err.println("空参构造方法!");
	}
	private String name;
	private Integer password;
	private String dir;
	private Integer age;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getPassword() {
		return password;
	}
	public void setPassword(Integer password) {
		this.password = password;
	}
	public String getDir() {
		return dir;
	}
	public void setDir(String dir) {
		this.dir = dir;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "user [name=" + name + ", password=" + password + ", dir=" + dir + ", age=" + age + "]";
	}
}

1.2、核心配置文件

applicationContext.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">	
	<!-- 创建对象方式一:空参构造 -->
	<bean name="user" class="com.java.entity.User"></bean>	
</beans>

1.3、测试类

Test.action 测试方法:

    @Test
	//	空参构造创建对象的方式
	public void test1(){
		// 加载核心配置文件  --- 此步中applicationContext会直接将所有的实体类创建出来;
		ApplicationContext c = new ClassPathXmlApplicationContext("applicationContext.xml");
		User user = (User) c.getBean("user");
		System.out.println(user);
	}

1.4运行结果

Spring框架创建对象的方式_Spring框架
若是将测试方法中的:

User = (User) c.getBean("user");
System.out.println(user);

这两行屏蔽(或去)掉,依然会有一个实体类中的空参调用的提示打印出来,因为ApplicationContext是一经加载此容器就会将其所管辖的所有对象都创建出来;


2、静态工厂创建实体类

此种创建实体类的特点就是有个对应的实体的静态工厂方法,代码如下所示:

1.1、实体类

实体类User对象:

User.java  User实体类
package com.java.entity;

public class User {

	private String name;
	private Integer password;
	private String dir;
	private Integer age;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getPassword() {
		return password;
	}
	public void setPassword(Integer password) {
		this.password = password;
	}
	public String getDir() {
		return dir;
	}
	public void setDir(String dir) {
		this.dir = dir;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "user [name=" + name + ", password=" + password + ", dir=" + dir + ", age=" + age + "]";
	}
}

1.2、创建对象的静态工厂方法

UserFactory.java User工厂

package com.java.Factory;

import com.java.entity.User;

public class UserFactory {
	
	public static User crivateUser() {
		System.out.println("静态工厂构造对象!");
		User user = new User();
		return user;
	}
}

1.3、核心配置文件

ApplicationContext.xml 核心配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">
	<!-- 创建对象方式二:静态工厂构造 -->
	<bean name="user2" class="com.java.Factory.UserFactory" factory-method="crivateUser"></bean>
</beans>

此种与之前学习的核心配置文件中的元素中的一些属性不太一样,首先,class属性的属性值不再是实体对象的全路径了,而是实体对象的静态工厂的的全路径;其次,多了一个属性,此属性值是静态工厂中创建实体对象的方法名;

1.4、测试类

Test.action 测试方法

@Test
	//	静态工厂构造创建对象的方式
	public void test2(){
		ApplicationContext c = new ClassPathXmlApplicationContext("applicationContext.xml");
		User user = (User) c.getBean("user2");
		System.out.println(user);
	}

1.5、运行结果

Spring框架创建对象的方式_Spring框架_02


3、实例工厂创建实体类

3.1、实体类

User.java User实体对象

package com.java.entity;

public class User {
	private String name;
	private Integer password;
	private String dir;
	private Integer age;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getPassword() {
		return password;
	}
	public void setPassword(Integer password) {
		this.password = password;
	}
	public String getDir() {
		return dir;
	}
	public void setDir(String dir) {
		this.dir = dir;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "user [name=" + name + ", password=" + password + ", dir=" + dir + ", age=" + age + "]";
	}
}

3.2、实例对象工厂

UserFactory.java User工厂

package com.java.Factory;

import com.java.entity.User;

public class UserFactory {

	public  User crivateUser2() {
		System.out.println("实例工厂构造对象!");
		User user = new User();
		return user;
	}
}

3.3、核心配置文件

ApplicationContext.xml 核心配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">
	<!-- 创建对象方式三:实例工厂构造 -->
	<bean name="user3" factory-bean="UserFactory" factory-method="crivateUser2"></bean>
	<bean name="UserFactory" class="com.java.Factory.UserFactory"></bean>
</beans>

释:
此方式创建对象的方式是这三种中最复杂的一种,因为使用的是动态(实例)方法调用,因此,在方法名的配置上和静态工厂的不同,需要先将要调用的动态(实例)工厂的工厂名(UserFactory)和方法名(crivateUser2)在第一个Bean元素中写出来,然后再根据工厂名(UserFactory)在第二个Bean元素中配置工厂名的全路径;

3.4、测试方法

Test.action 测试方法

    @Test
	//	实例工厂构造创建对象的方式
	public void test3(){
		ApplicationContext c = new ClassPathXmlApplicationContext("applicationContext.xml");
		User user = (User) c.getBean("user3");
		System.out.println(user);
	}

3.5、运行结果

Spring框架创建对象的方式_Spring框架_03


pass: Spring创建对象的三种方式最常用的就是空参构造,但是也不代表不可以用其他的,三种构造方法在功能实现上并没有太大的差别,只是第一种编写起来最为省事;


《END》