spring学习 四 对象的创建

spring中,有三种创建对象的方式

(1)构造创建

(2)实例工厂构造

(3)静态工厂构造

一  构造器创建

在构造器创建对象时,有无参构造和有参构造 两种

(1)在spring中,默认的是无参构造,在applicationContext.xml配置如下,此时com.spring.pojo.People必须有无参构造器,无论是java语言提供的,还是用户自定义的

    <!-- 
            id属性的值就是对象在当前容器下的唯一的标识
            class属性的值,就是对象对应的类
       
--> <bean id="peo" class="com.spring.pojo.People"> </bean>

(2)有参构造,此时用户必须提供有参构造器,

<!-- 
             有参构造:
             (1)  <constructor-arg></constructor-arg>标签的个数  等于  构造器参数的个数
             (2) 当有多个有参构造器重载时,可以通过<constructor-arg></constructor-arg>标签
                 中的index,name,type来 确切的指定要调用哪一个构造器,如果没有确切的指定,则调用类里面
                 最后一个匹配的最后一个构造器
             () 构造时,注入的值,如果是基本类型或String,在<constructor-arg>中使用value属性,
                 如果是其他的类类型,则用ref进行注入
                 
          -->     
        <bean id="peo" class="com.spring.pojo.People">
            <!-- 
                (1)constructor-arg标签的个数代表构造器中参数的个数,本例中有两个,代表会调用有两个
                    参数的构造器
                (2)index的值是构造器中参数的索引位置,从0开始
                
                (3) ref 是引用另外一个bean ,value用来引用基本类型或者String类型的
             -->
            <constructor-arg index="0" value="1"></constructor-arg>
            <constructor-arg index="1" value="zhangsan"></constructor-arg>
        </bean>
        
        <bean id="peo2" class="com.spring.pojo.People">
            <!-- 
                (1)constructor-arg标签的个数代表构造器中参数的个数,本例中有两个,代表会调用有两个
                    参数的构造器
                (2)name属性的值,就是构造函数的参数的形参的名称,在本例中会调用
                    public People(int argid, String argname)构造器,
                    
                    但是如果定义了public People(String argname,int argid),这个构造器也是可匹配的
             -->
            <constructor-arg name="argid" value="1"></constructor-arg>
            <constructor-arg name="argname" value="wangwu"></constructor-arg>
        </bean>
        
         <bean id="peo3" class="com.spring.pojo.People">
            <!-- 
                调用只有一个参数的构造器,且参数名称为argname
             -->
            <constructor-arg name="argname" value="赵六"></constructor-arg>
        </bean>

  (二)实例工厂构造

  就是bean的创建是由实例工厂的方法来创建,使用实例工厂,实现要实例化实例工厂,然后调用实例工厂中的创建对象的方法。

配置如下:

 <!-- 实例化 实例工厂 -->
        <bean id="instanceFactory" class="com.spring.factory.PeopleFactory"></bean>
        <bean id="peo4" factory-bean="instanceFactory" factory-method="newInstance">
        </bean>
public class PeopleFactory {
    public People newInstance() {
        return new People();
    }
}

(三)静态工厂

使用静态工厂进行构造,不用像实例工厂先实例化工厂,直接用类调用一个static的创建对象的方法

public class PeopleFactory {
    public static People newInstance() {
        return new People();
    }
}

配置如下:

<bean id="peo4" class="com.spring.factory.PeopleFactory" factory-method="newInstance">
        </bean>
原文地址:https://www.cnblogs.com/cplinux/p/9734962.html