2.2 Bean的实例化
spring支持使用构造器、静态工厂、实例工厂等三种方式来创建bean。本书对前两种实例化方式进行详细讲解。
使用构造器实例化;
这种实例化的方式可能在我们平时的开发中用到的是最多的,因为在xml文件中配置简单并且也不需要额外的工厂类来实现。采用这种实例化方式要注意的是:要实例化的类中如果有构造器的话,一定要有一个无参的构造器。
程序目录结构如下图所示:
其中Student.java内容如下:
package entity; public class Student { String name; int age; public Student(){ name="无名"; age=0; } public Student(String name,int age){ this.name="张三"; this.age=18; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String toString(){ return "姓名:"+name+" 年龄:"+age; } } |
Student.java类代码中我们添加了一个无参的构造方法,在该构造方法中我们对两个成员变量时行了赋值。另外我们还添加了一个toString()方法,该方法用于显示姓名和年龄信息,它重写了Object类的toString()方法。
Student.xml配置文件代码如下:
<?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="student" class="entity.Student"/> </beans> |
测试类Test.java代码如下:
package entity; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test { public static void main(String[] args) { String xmlPath = "student.xml"; ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath); Student stu= (Student) applicationContext.getBean("student"); System.out.println(stu); } } |
以下是程序的运行结果:

从程序运行结果来看,Spring 容器正是调用了Student类的无参构造方法完成实例化的。Spring容器通过Bean对应的默认的构造函数来实例化Bean,在前面大家看到的几个例子中的xml文件中bean的配置,都是通过构造器的方式来实例化Bean的。
静态工厂实例化;
构造器实例化的方式可能在我们平时的开发中用到的是最多的,因为在xml文件中配置简单并且也不需要额外的工厂类来实现。采用这种实例化方式也有一个显著的缺点,那就是不够灵活,相对来讲使用静态工厂方式进行实例化则可以弥补该缺点。
我们可以在Student.java类添加一个静态工厂方法,代码如下:
public static Student createStu(){ Student s=new Student(); s.setName("李四"); s.setAge(20); return s; } |
同时我们把student.xml文件中的Bean配置修改如下:
<bean id="student" class="entity.Student" factory-method="createStu"/> |
在此我们把bean的factory-method属性值设为"createStu",表明该bean实例化时应该调用Student类的静态方法createStu()。程序运行结果如下图:
![]()
从运行结果来看,实例化时确实调用了createStu()静态方法。

