美文网首页
Spring之创建对象的三种方式

Spring之创建对象的三种方式

作者: 韩克 | 来源:发表于2019-08-03 19:05 被阅读0次

spring创建对象的三种方式

1.通过构造方法创建

1.1无参构造:默认情况

1.2有参构造创建:需要明确配置

需要在类中提供有参构造方法在 applicationContext.xml 中设置调用哪个构造方法创建对象
如果设定的条件匹配多个构造方法执行最后的构造方法
pojo类:

package com.xt.pojo;

public class People {
    private String name;
    private int age;
    public People() {
        super();
        // TODO Auto-generated constructor stub
    }
    public People(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "People [name=" + name + ", age=" + age + "]";
    }
}

<!-- 通过有参构造1,<constructor-arg>与有参构造函数的顺序保持一致 -->
    <bean id="peo" class="com.xt.pojo.People">
        <constructor-arg>
            <value>hanke</value>
        </constructor-arg>
        <constructor-arg>
            <value>18</value>
        </constructor-arg>
    </bean>
    
    <!-- 通过有参构造2-->
    <bean id="peo2" class="com.xt.pojo.People">
        <!-- ref 引用另一个bean value 基本数据类型或String 等 -->        
        <constructor-arg name="name" value="张三"></constructor-arg>
        <constructor-arg name="age" value="19"></constructor-arg>
    </bean>

通过实例工厂

工厂设计模式:帮助创建类对象.一个工厂可以生产多个对象.
2.2 实例工厂:需要先创建工厂,才能生产对象
2.3 实现步骤:
2.3.1 必须要有一个实例工厂

创建工厂类

package com.xt.factory;

import com.xt.pojo.People;

public class PeopleFactory {
    public People newInstance(){
        return new People("hd",18);
    }
}

在 applicationContext.xml 中配置工厂对象和需要创建的对象

    <!-- 通过工厂模式start -->
    <!-- 1.注册工厂 -->
    <bean id="peopleFactory" class="com.xt.factory.PeopleFactory"></bean>
    <bean id="peoByfactory" factory-bean="peopleFactory" factory-method="newInstance"></bean>   
    <!-- 通过工厂模式end -->

测试

@org.junit.Test
    public void peoTest3() {
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        People people = (People) ac.getBean("peoByfactory");
        System.out.println(people);
    }
    /* 
     运行结果:
     People [name=hd, age=18]
     */

通过静态工厂

不需要创建工厂,快速创建对象.

编写一个静态工厂(在方法上添加static)

package com.xt.factory;

import com.xt.pojo.People;

public class StaticFactory {
    public static People getPeopleByStaticFactory() {
        return new People("wulala",18);
    }
}

在applicationContext.xml 中创建对象,不需要再创建factory-bean

    <!-- 通过静态工厂实现创建对象start -->  
    <bean id="peoByStaticFactory" class="com.xt.factory.StaticFactory" factory-method="getPeopleByStaticFactory"></bean>
    <!-- 通过静态工厂实现创建对象end -->

测试

@org.junit.Test
public void peoTest() {
    ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
    People people = (People) ac.getBean("peo");
    System.out.println(people);
}
    /* 
    运行结果:
    People [name=wulala, age=18]
     */
注意:无论是实例工厂模式还是静态工厂模式,都需要对factory-method属性赋值,
    只是静态工厂模式不需要事先注册工厂类,生成工厂对象,不需要为factory-bean属性赋值。
    静态工厂模式只需要将class属性赋值为静态工厂类的全限定路径。
    即只需要为class和factory-method属性赋值。

相关文章

网友评论

      本文标题:Spring之创建对象的三种方式

      本文链接:https://www.haomeiwen.com/subject/vbhsdctx.html