首先提供目录结构如下:
下面提供各文件代码,以供参考:
UserDynamicFactory.java
1 package cn.sxt.factory;
2
3 import cn.sxt.vo.User;
4
5 /**
6 * ��̬��������������
7 *
8 */
9 public class UserDynamicFactory {
10 public User createUser(String name,int age){
11 return new User(name,age);
12 }
13 }
UserFactory.java
1 package cn.sxt.factory;
2
3 import cn.sxt.vo.User;
4 /**
5 *
6 */
7 public class UserFactory {
8 public static User createUser(String name,int age){
9 return new User(name,age);
10 }
11 }
User.java
1 package cn.sxt.vo;
2
3
4 public class User {
5 private String name;
6 private int age;
7 public User() {
8 }
9 public User(String name, int age) {
10 super();
11 this.name = name;
12 this.age = age;
13 }
14 public String getName() {
15 return name;
16 }
17 public void setName(String name) {
18 this.name = name;
19 }
20 public int getAge() {
21 return age;
22 }
23 public void setAge(int age) {
24 this.age = age;
25 }
26 @Override
27 public String toString() {
28 return "User [name=" + name + ", age=" + age + "]";
29 }
30 }
beans.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://www.springframework.org/schema/beans
5 http://www.springframework.org/schema/beans/spring-beans.xsd">
6 <!-- 通过有参构造方法创建对象 -->
7 <bean id="u1" class="cn.sxt.vo.User">
8 <!-- 通过参数的下标来设置参数 下标从0开始 -->
9 <constructor-arg index="0" value="张三疯"/>
10 <constructor-arg index="1" value="33"/>
11 </bean>
12 <bean id="u2" class="cn.sxt.vo.User">
13 <!-- 通过参数的名称来设置参数 name表示参数名称 -->
14 <constructor-arg name="name" value="张三疯"/>
15 <constructor-arg name="age" value="33"/>
16 </bean>
17 <bean id="u3" class="cn.sxt.vo.User">
18 <!-- 通过参数的类型来设置参数 type表示参数类型 -->
19 <constructor-arg type="java.lang.String" value="张三疯"/>
20 <constructor-arg type="int" value="33"/>
21 </bean>
22 <bean id="u4" class="cn.sxt.vo.User">
23 <property name="name" value="张无忌"/>
24 <property name="age" value="23"/>
25 </bean>
26 <!-- 通过静态工厂创建对象 -->
27 <bean id="u5" class="cn.sxt.factory.UserFactory" factory-method="createUser">
28 <constructor-arg type="java.lang.String" value="张三疯"/>
29 <constructor-arg type="int" value="33"/>
30 </bean>
31 <!-- 通过动态工厂来创建对象 -->
32 <bean id="factory" class="cn.sxt.factory.UserDynamicFactory"/>
33 <bean id="u6" factory-bean="factory" factory-method="createUser">
34 <constructor-arg type="java.lang.String" value="张三疯"/>
35 <constructor-arg type="int" value="33"/>
36 </bean>
37 </beans>
SpringTest.java
1 package cn.sxt.spring;
2
3 import org.junit.Test;
4 import org.springframework.context.ApplicationContext;
5 import org.springframework.context.support.ClassPathXmlApplicationContext;
6
7 import cn.sxt.vo.User;
8
9 public class SpringTest {
10 @Test
11 public void testHello(){
12 //��������
13 ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
14 User u=(User)ac.getBean("u6");
15 System.out.println(u);
16 }
17 }
一.通过构造方法来创建对象
1. 通过参数下标来设置参数的值
<!-- 通过有参构造方法创建对象 -->
<bean id="u1" class="cn.sxt.vo.User">
<!-- 通过参数的下标来设置参数 下标从0开始 -->
<constructor-arg index="0" value="张三疯"/>
<constructor-arg index="1" value="33"/>
</bean>
2.通过参数名称来设置
<bean id="u2" class="cn.sxt.vo.User">
<!-- 通过参数的名称来设置参数 name表示参数名称 -->
<constructor-arg name="name" value="张三疯"/>
<constructor-arg name="age" value="33"/>
</bean>
3.通过参数类型来设置
<bean id="u3" class="cn.sxt.vo.User">
<!-- 通过参数的类型来设置参数 type表示参数类型 -->
<constructor-arg type="java.lang.String" value="张三疯"/>
<constructor-arg type="int" value="33"/>
</bean>
二. 通过无参构造方法来创建对象
<bean id="u4" class="cn.sxt.vo.User">
<property name="name" value="张无忌"/>
<property name="age" value="23"/>
</bean>
注意:需要提供无参构造器,并且属性要有对应的set方法
三. 通过静态工厂来创建对象
静态工厂类:
/**
* 静态工厂方法
* 通过静态工厂来创建对象
*/
public class UserFactory {
public static User createUser(String name,int age){
return new User(name,age);
}
}
配置文件
<!-- 通过静态工厂创建对象 -->
<bean id="u5" class="cn.sxt.factory.UserFactory" factory-method="createUser">
<constructor-arg type="java.lang.String" value="张三疯"/>
<constructor-arg type="int" value="33"/>
</bean>
四.通过动态工厂来创建对象
动态工厂类
/**
* 动态工厂来创建对象
*
*/
public class UserDynamicFactory {
public User createUser(String name,int age){
return new User(name,age);
}
}
配置文件
<!-- 通过动态工厂来创建对象 -->
<bean id="factory" class="cn.sxt.factory.UserDynamicFactory"/>
<bean id="u6" factory-bean="factory" factory-method="createUser">
<constructor-arg type="java.lang.String" value="张三疯"/>
<constructor-arg type="int" value="33"/>
</bean>