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. const 全面理解

    问题1:const int a : 和  int  const  a :的区别 定义一个变量: 类型描述符 + 变量名 类型描述符包括类型修饰符和数据类型. 类型修饰符有:short  long  u ...

  2. Hdu1805-Expression(表达式树模版题+层序遍历树+栈的基本应用)

    2018-11-23-02:27:37 原题链接 题目描述: 题目一目了然. 本题思路: 本题很容易能想到是构建表达式树然后按照层序逆序输出即可. AC代码: #include <cstdio& ...

  3. 153. Find Minimum in Rotated Sorted Array (Array; Divide-and-Conquer)

    Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...

  4. python 库安装方法及常用库

    python 库安装方法及常用库 python库安装方法: 方法一:setpu.py 1.下载库压缩包,解压,记录下路径:*:/**/……/ 2.运行cmd,切换到*:/**/……/目录下 3.运行s ...

  5. vue 调用第三方接口配置

    1.配置proxyTable 3.调用接口,将接口地址替换为配置的‘/api’

  6. Wannafly挑战赛13 D.applese的生日(贪心+思维)

    题目描述 最可爱的applese生日啦,他准备了许多个质量不同的蛋糕,想请一些同学来参加他的派对为他庆生,为了不让一部分同学感到不爽,他决定把每个蛋糕都分割成几份(也可以不分割),使得最小的蛋糕的质量 ...

  7. 利用sshtunnel实现跳板机的效果[嵌套ssh实现]

    with SSHTunnelForwarder ( ssh_address_or_host = (conf.server_ip,conf.server_port), ssh_username=conf ...

  8. AngularJS——第5章 作用域

    第5章 作用域 通常AngularJS中应用(App)是由若干个视图(View)组合成而成的,而视图(View)又都是HTML元素,并且HTML元素是可以互相嵌套的,另一方面视图都隶属于某个控制器(C ...

  9. linux cp 和scp详解

    linux之cp/scp命令+scp命令详解   名称:cp 使用权限:所有使用者 使用方式: cp [options] source dest cp [options] source... dire ...

  10. samrty模板变量操作符

    count_sentences [计算句数],示例:{$smarty.get.name|count_sentences} count_words [计算词数],示例:{$smarty.get.name ...