Spring 中Bean 实例化有几种方式呢?(3种)
1,通过类构造器实例化。(People people = new People(张三,26))
(第一种是最常用,最根本的)
2,使用静态工厂实例化
3,使用实例工厂实例化
(静态工厂和实例工厂类都是间接通过构造器实现的实例化)
public class Person {
private String name;
private Integer age;
public Person() {
System.out.println("Person默认构造函数");
}
public Person(String name, Integer age) {
this.name = name;
this.age = age;
System.out.println("Person{" +
"name='" + name + '\'' +
", age=" + age +
'}');
}
}
构造函数实例化对象
<!-- 1.调用无参构造函数 -->
<bean class="top.xiongmingcai.spring.instance.Person" id="person"/>
<!-- 2.调用有参构造函数 -->
<bean id="person2" class="top.xiongmingcai.spring.instance.Person">
<constructor-arg name="name" value="枫叶(构造函数)"/>
<constructor-arg name="age" value="23"/>
</bean>

使用静态工厂实例化
添加静态工厂类
/**
* Person静态工厂
*/
public class PersonStaticFactory {
public static Person createPerson(String name, Integer age) {
return new Person(name, age);
}
}
class 指向静态工厂类并 factory-method指向createPerson静态方法
<!-- 通过静态工厂创建对象-->
<bean class="com.imooc.spring.instance.PersonStaticFactory" factory-method="createPerson" id="person3">
<constructor-arg name="name" value="蓝天(静态工厂)"/>
<constructor-arg name="age" value="27"/>
</bean>
使用实例工厂实例化
/**
* Person实例工厂
*/
public class PersonFactory {
public Person createPerson(String name, Integer age) {
return new Person(name, age);
}
}
factory-bean="personFactory" 指向personFactoryBean
factory-method="createPerson" 指向personFactoryBean createPerson 方法
<!-- 通过实例工厂创建对象-->
<bean class="top.xiongmingcai.spring.instance.PersonFactory" id="personFactory"/>
<bean factory-bean="personFactory" factory-method="createPerson" id="person4">
<constructor-arg name="name" value="绿地(实例工厂)"/>
<constructor-arg name="age" value="29"/>
</bean>
附录
<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.xsd">
<!--构造函数实例化-->
<!-- 1.调用无参构造函数 -->
<bean class="top.xiongmingcai.spring.instance.Person" id="person"/>
<!-- 2.调用有参构造函数 -->
<bean id="person2" class="top.xiongmingcai.spring.instance.Person">
<constructor-arg name="name" value="枫叶(构造函数)"/>
<constructor-arg name="age" value="23"/>
</bean>
<!-- 通过静态工厂创建对象-->
<bean class="top.xiongmingcai.spring.instance.PersonStaticFactory" factory-method="createPerson" id="person3">
<constructor-arg name="name" value="蓝天(静态工厂)"/>
<constructor-arg name="age" value="27"/>
</bean>
<!-- 通过实例工厂创建对象-->
<bean class="top.xiongmingcai.spring.instance.PersonFactory" id="personFactory"/>
<bean factory-bean="personFactory" factory-method="createPerson" id="person4">
<constructor-arg name="name" value="绿地(实例工厂)"/>
<constructor-arg name="age" value="29"/>
</bean>
</beans>