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>
spring学习 四 对象的创建的更多相关文章
- Spring.NET依赖注入框架学习-- 泛型对象的创建和使用
Spring.NET依赖注入框架学习-- 泛型对象的创建和使用 泛型对象的创建方法和普通对象是一样的. 通过构造器创建泛型对象 下面是一个泛型类的代码: namespace GenericsPlay ...
- spring学习(四) ———— 整合web项目(SSH)
清楚了spring的IOC 和 AOP,最后一篇就来整合SSH框架把,记录下来,以后应该会用的到. --WH 一.web项目中如何使用spring? 当tomcat启动时,就应该加载spring的配置 ...
- Spring学习(四)--面向切面的Spring
一.Spring--面向切面 在软件开发中,散布于应用中多处的功能被称为横切关注点(cross- cutting concern).通常来讲,这些横切关注点从概念上是与应用的业 务逻辑相分离的(但是往 ...
- jvm学习记录-对象的创建、对象的内存布局、对象的访问定位
简述 今天继续写<深入理解java虚拟机>的对象创建的理解.这次和上次隔的时间有些长,是因为有些东西确实不好理解,就查阅各种资料,然后弄明白了才来做记录. (此文中所阐述的内容都是以Hot ...
- JVM学习-之对象的创建和内存分配
最近看JVM内存模型,看了很多文章,大都讲到JVM将内存区域划分分:Mehtod-Area(No heap) 方法区,Heap(堆)区,Program Counter Register(程序计数器), ...
- spring学习四:springMVC
ref:http://www.cnblogs.com/ysocean/tag/SpringMVC%E5%85%A5%E9%97%A8%E7%B3%BB%E5%88%97/ Spring MVC的处理流 ...
- cocos2d-android学习四 ---- 精灵的创建
上篇文章我们创建了一个黑乎乎的界面.以下我们就给它增加一个精灵. 我们这次就一起来学习精灵的基础知识. 1.什么是精灵 游戏中全部会动的对象都是精灵,能够是主人公,背景元素,一个子弹或者是敌人. 一个 ...
- JavaScript学习笔记——对象的创建
对象是JavaScript基本数据类型,在JavaScript中除了Undefined.Null.布尔型(ture.false).字符串和数字之外,其他的都属于对象. 在JavaScript中,一个对 ...
- js 学习四 对象应用 吃货游戏
游戏来源于 Mdn学习网站: 该例子用于对象的理解非常有效(建议看完上面网站的内容在开始练习) 弹球 body { margin: 0; overflow: hidden; font-family: ...
随机推荐
- (转)学习ffmpeg官方示例transcoding.c遇到的问题和解决方法
转自:https://blog.csdn.net/w_z_z_1991/article/details/53002416 Top 最近学习ffmpeg,官网提供的示例代码transcoding.c演示 ...
- Android 中Application向Activity 传递数值
比如极光注册时获取用户的唯一标示ID需要在登录时进行传递,实现消息的指定用户推送功能 public String id; public String getId() { return id; } pu ...
- Linux之间配置SSH互信(SSH免密码登录)
为简化SSH过程,采用证书方式,免去SSH登入时需要输入账号密码的过程,具体操作如下: 一.在SSH服务器所在机器上 1.以root用户登录,更改ssh配置文件 /etc/ssh/sshd_confi ...
- oracle 中decode函数用法
学习记录: 含义解释: decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下:IF 条件=值1 THEN RETURN(翻译值1)ELSIF 条件=值2 ...
- http://ctf.bugku.com/challenges#Timer(%E9%98%BF%E9%87%8CCTF):Bugku——Timer(阿里CTF)
做了第一个android apk逆向题,很多工具啥的还没用过,再接再厉. 找到方法发现这个apk支持的SDK API是15-17,于是就下载了API 16并制作了模拟器,但发现还是运行不起来, ...
- PHP如何处理yyyyMMddHHmmssSSSZ?
PHP如何处理yyyyMMddHHmmssSSSZ? 更新: 2016-01-05 12:45 作者: wecandoitforev PHP编程中,时间,日期的应用是必不可少的.有一种日期格式:yyy ...
- Mybatis 表名是变量时
写语句时这样就可以了 <select id="selectTotal" resultType="java.util.Map" parameterType= ...
- PAT L2-013 红色警报(并查集求连通子图)
战争中保持各个城市间的连通性非常重要.本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报.注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不 ...
- IEDriver executable needs to be available in the path
解决办法: 去http://selenium-release.storage.googleapis.com/index.html 下载指定IE版本 解压后 拷贝到Python的目录下 重新运行,提示错 ...
- go语言中的文件创建,写入,读取,删除
package main; import ( "os" "fmt" "strconv" ) func main() { //打开文件,返回文 ...