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>

spring学习 四 对象的创建的更多相关文章

  1. Spring.NET依赖注入框架学习-- 泛型对象的创建和使用

    Spring.NET依赖注入框架学习-- 泛型对象的创建和使用 泛型对象的创建方法和普通对象是一样的. 通过构造器创建泛型对象 下面是一个泛型类的代码: namespace GenericsPlay ...

  2. spring学习(四) ———— 整合web项目(SSH)

    清楚了spring的IOC 和 AOP,最后一篇就来整合SSH框架把,记录下来,以后应该会用的到. --WH 一.web项目中如何使用spring? 当tomcat启动时,就应该加载spring的配置 ...

  3. Spring学习(四)--面向切面的Spring

    一.Spring--面向切面 在软件开发中,散布于应用中多处的功能被称为横切关注点(cross- cutting concern).通常来讲,这些横切关注点从概念上是与应用的业 务逻辑相分离的(但是往 ...

  4. jvm学习记录-对象的创建、对象的内存布局、对象的访问定位

    简述 今天继续写<深入理解java虚拟机>的对象创建的理解.这次和上次隔的时间有些长,是因为有些东西确实不好理解,就查阅各种资料,然后弄明白了才来做记录. (此文中所阐述的内容都是以Hot ...

  5. JVM学习-之对象的创建和内存分配

    最近看JVM内存模型,看了很多文章,大都讲到JVM将内存区域划分分:Mehtod-Area(No heap) 方法区,Heap(堆)区,Program Counter Register(程序计数器), ...

  6. spring学习四:springMVC

    ref:http://www.cnblogs.com/ysocean/tag/SpringMVC%E5%85%A5%E9%97%A8%E7%B3%BB%E5%88%97/ Spring MVC的处理流 ...

  7. cocos2d-android学习四 ---- 精灵的创建

    上篇文章我们创建了一个黑乎乎的界面.以下我们就给它增加一个精灵. 我们这次就一起来学习精灵的基础知识. 1.什么是精灵 游戏中全部会动的对象都是精灵,能够是主人公,背景元素,一个子弹或者是敌人. 一个 ...

  8. JavaScript学习笔记——对象的创建

    对象是JavaScript基本数据类型,在JavaScript中除了Undefined.Null.布尔型(ture.false).字符串和数字之外,其他的都属于对象. 在JavaScript中,一个对 ...

  9. js 学习四 对象应用 吃货游戏

    游戏来源于 Mdn学习网站: 该例子用于对象的理解非常有效(建议看完上面网站的内容在开始练习) 弹球 body { margin: 0; overflow: hidden; font-family: ...

随机推荐

  1. oracle 存储过程模板

    CREATE OR REPLACEPROCEDURE PROCE_NAME(V_IN varchar2, V_OUT out varchar2) ASBEGIN --...  commit;  V_O ...

  2. SML + NL + HJ

    Join是一种试图将两个表结合在一起的谓词,一次只能连接2个表,表连接也可以被称为表关联.在后面的叙述中,我们将会使用”row source”来代替”表”,因为使用row source更严谨一些,并且 ...

  3. 三:python 对象类型详解一:数字(上)

    一:python 的数字类型: a)整数和浮点数 b)复数 c)固定精度的十进制数 d)有理分数 e)集合 f)布尔类型 g)无穷的整数精度 h)各种数字内置函数和模块 二:各种数字类型的详解 1,数 ...

  4. C++批量注释代码段取消注释代码段快捷键

    1,   先选中要注释的代码段 2,按住ctrl+k+c注释本段代码 3,按住ctrl+k+u取消注释本段代码 用VS2013运行C++语言程序,运行结果闪一下就没了 解决方法是: 在return   ...

  5. docker使用以及dockerfile编写

    一 docker常用命令 1. service docker start 2. docker images        显示所有镜像 3. docker ps [-a]          显示正在运 ...

  6. codeforces 722D Generating Sets 【优先队列】

    You are given a set Y of n distinct positive integers y1, y2, ..., yn. Set X of n distinct positive ...

  7. NumPy 位运算

    NumPy 位运算 NumPy "bitwise_" 开头的函数是位运算函数. NumPy 位运算包括以下几个函数: 函数 描述 bitwise_and 对数组元素执行位与操作 b ...

  8. angular实现链接锚记

    前言: 之所以这么说,是因为angular的路由将html默认的链接锚记的#给占用了,所以传统的链接锚记在这里将不再适用,这个有点坑啊,又要多写好几行代码来模拟这个功能. 实现原理: location ...

  9. [leetcode]133. Clone Graph 克隆图

    题目 给定一个无向图的节点,克隆能克隆的一切 思路 1--2 | 3--5 以上图为例, node    neighbor 1         2, 3 2         1 3         1 ...

  10. 自动化运维工具 SaltStack 搭建

    原文地址:https://www.ibm.com/developerworks/cn/opensource/os-devops-saltstack-in-cloud/index.html#N10072 ...