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. 如何修改Eclipse的 workspace目录

    Eclipse是一款很强的Java IDE, eclipse ide for eclipse committers 这里的committers 就是投稿者与执行者的意思,也就是说这个eclipse是为 ...

  2. cf-Global Round2-D. Frets On Fire(二分)

    题目链接:http://codeforces.com/contest/1119/problem/D 题意:给n(<=1e5)个数s[i],i=1..n,(0<=s[i]<=1e18) ...

  3. pta7-20 畅通工程之局部最小花费问题(Kruskal算法)

    题目链接:https://pintia.cn/problem-sets/15/problems/897 题意:给出n个城镇,然后给出n×(n-1)/2条边,即每两个城镇之间的边,包含起始点,终点,修建 ...

  4. hdu 5154 拓扑排序

    例题:hdu 5154 链接  http://acm.hdu.edu.cn/showproblem.php?pid=5154 题目意思是第一行先给出n和m表示有n件事,m个关系,接下来输入m行,每行有 ...

  5. HDU 6118 度度熊的交易计划(最小费用最大流)

    Problem Description度度熊参与了喵哈哈村的商业大会,但是这次商业大会遇到了一个难题: 喵哈哈村以及周围的村庄可以看做是一共由n个片区,m条公路组成的地区. 由于生产能力的区别,第i个 ...

  6. 【linux C】C语言中常用的几个函数的总结【二】

    3.fgets 虽然用 gets() 时有空格也可以直接输入,但是 gets() 有一个非常大的缺陷,即它不检查预留存储区是否能够容纳实际输入的数据,换句话说,如果输入的字符数目大于数组的长度,get ...

  7. swift 带有下划线的UIbutton

    import UIKit /// 带下划线的Button class UnderlineButton: JYBaseButton { /// 下划线高度 var underLineHeight:CGF ...

  8. MVC是架构模式,而不是设计模式

    最早学编程的时候看过一些书,印象深刻的一本书<设计模式解析>,那本书给我后来的工作提供了很大的帮助. 他叫我站在问题模型的立场上指定解决方法,也教会了我软件设计中每个问题都可以细化到到不可 ...

  9. 百度地图插件(百度地图AK申请配置指南)

    百度地图AK申请配置指南     [LBS云] 百度地图AK申请配置指南 1. 该文档是详细版,图文并茂: 2. 该指南是针对browser-mobile-sever三种终端开发的申请与配置说明: 3 ...

  10. django os.environ慎用setdefault操作环境变量!

    在绝大多数情况下,如果需要在程序运行过程中设置环境变量,使用os.environ.setdefault函数是没有任何问题的,但是有两种场景下setdefault会造成意外的问题,需要慎用: 如果程序执 ...