spring framework bean 实例化

Spring Framework:4.3.14.RELEASE

本文主要是论述 Spring Framework IOC 容器中 Bean 的实例化。

Bean 的实例化主要是两种方式:

  • 通过构造函数实例化
  • 通过静态方法实例化

通过构造函数实例化

通过构造函数实例化,前提条件是 Bean 含有一个无参构造器,可以是隐式无参构造器,也可以是显式无参构造器。

1
2
3
4
5
6
7
8
9
10
11
12
13
public class ExampleBeanOne {

private String name;

public void setName(String name) {
this.name = name;
}

public String hello() {
return "Hello " + name;
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class ExampleBeanTwo {

private String name;

public ExampleBeanTwo() {
}

public ExampleBeanTwo(String name) {
this.name = name;
}

public String hello() {
return "Hello " + name;
}

}
1
2
3
4
5
6
7
<bean id="exampleBeanOne" class="com.example.spring.ExampleBeanOne">
<property name="name" value="ExampleBeanOne"></property>
</bean>

<bean id="exampleBeanTwo" class="com.example.spring.ExampleBeanTwo">
<constructor-arg value="ExampleBeanTwo"></constructor-arg>
</bean>

通过静态方法实例化

通过静态方法实例化,前提条件是有一个静态方法可以实例化 Bean,可以是自身提供的静态方法,也可以是其他类提供的静态方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class ExampleBeanThree {

private static ExampleBeanThree exampleBeanThree = new ExampleBeanThree("ExampleBeanThree");

private String name;

public static ExampleBeanThree createInstance() {
return exampleBeanThree;
}

private ExampleBeanThree(String name) {
this.name = name;
}

public String hello() {
return "Hello " + name;
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

public class ExampleBeanFive {
private String name;

public ExampleBeanFive() {
}

public ExampleBeanFive(String name) {
this.name = name;
}

public String hello() {
return "Hello " + name;
}
}

public class ExampleBeanSix {

private static ExampleBeanFive exampleBeanFive = new ExampleBeanFive("ExampleBeanFive");

public ExampleBeanFive createClientInstance() {
return exampleBeanFive;
}

}
1
2
3
4
5
6
7
8
<bean id="exampleBeanThree" class="com.example.spring.ExampleBeanThree" factory-method="createInstance">
</bean>

<bean id="exampleBeanSix" class="com.example.spring.ExampleBeanSix">
</bean>

<bean id="exampleBeanFive" factory-bean="exampleBeanSix" factory-method="createClientInstance">
</bean>

通过静态方法实例化不常见,推荐使用构造函数实例化