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>