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>