zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    读写excel的组件
    一个关于C#语言中的Property的低级BUG,花了我二十分钟
    使用wwAppConfiguration类库来轻松读写应用程序配置信息
    为因地震死难的同胞默哀
    页面执行时生成静态文件的方法
    【转载】sp_spaceused2,看库里全部表占用的物理空间
    在微软中文技术论坛 CSDN cnblogs 三个微软社区中提问
    在内网服务器中获得真正的客户端ip的方法
    深拷贝的通用方法
    你知道在word中如何将段落标记替换成其他字符吗?
  • 原文地址:https://www.cnblogs.com/cplinux/p/9734962.html
Copyright © 2011-2022 走看看