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、实体类
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运行结果
若是将测试方法中的:
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、运行结果
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、运行结果
pass: Spring创建对象的三种方式最常用的就是空参构造,但是也不代表不可以用其他的,三种构造方法在功能实现上并没有太大的差别,只是第一种编写起来最为省事;
《END》