spring创建对象的三种方式
1.通过构造方法创建
1.1无参构造:默认情况
1.2有参构造创建:需要明确配置
需要在类中提供有参构造方法在 applicationContext.xml 中设置调用哪个构造方法创建对象
如果设定的条件匹配多个构造方法执行最后的构造方法
pojo类:
package com.xt.pojo;
public class People {
private String name;
private int age;
public People() {
super();
// TODO Auto-generated constructor stub
}
public People(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "People [name=" + name + ", age=" + age + "]";
}
}
<!-- 通过有参构造1,<constructor-arg>与有参构造函数的顺序保持一致 -->
<bean id="peo" class="com.xt.pojo.People">
<constructor-arg>
<value>hanke</value>
</constructor-arg>
<constructor-arg>
<value>18</value>
</constructor-arg>
</bean>
<!-- 通过有参构造2-->
<bean id="peo2" class="com.xt.pojo.People">
<!-- ref 引用另一个bean value 基本数据类型或String 等 -->
<constructor-arg name="name" value="张三"></constructor-arg>
<constructor-arg name="age" value="19"></constructor-arg>
</bean>
通过实例工厂
工厂设计模式:帮助创建类对象.一个工厂可以生产多个对象.
2.2 实例工厂:需要先创建工厂,才能生产对象
2.3 实现步骤:
2.3.1 必须要有一个实例工厂
创建工厂类
package com.xt.factory;
import com.xt.pojo.People;
public class PeopleFactory {
public People newInstance(){
return new People("hd",18);
}
}
在 applicationContext.xml 中配置工厂对象和需要创建的对象
<!-- 通过工厂模式start -->
<!-- 1.注册工厂 -->
<bean id="peopleFactory" class="com.xt.factory.PeopleFactory"></bean>
<bean id="peoByfactory" factory-bean="peopleFactory" factory-method="newInstance"></bean>
<!-- 通过工厂模式end -->
测试
@org.junit.Test
public void peoTest3() {
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
People people = (People) ac.getBean("peoByfactory");
System.out.println(people);
}
/*
运行结果:
People [name=hd, age=18]
*/
通过静态工厂
不需要创建工厂,快速创建对象.
编写一个静态工厂(在方法上添加static)
package com.xt.factory;
import com.xt.pojo.People;
public class StaticFactory {
public static People getPeopleByStaticFactory() {
return new People("wulala",18);
}
}
在applicationContext.xml 中创建对象,不需要再创建factory-bean
<!-- 通过静态工厂实现创建对象start -->
<bean id="peoByStaticFactory" class="com.xt.factory.StaticFactory" factory-method="getPeopleByStaticFactory"></bean>
<!-- 通过静态工厂实现创建对象end -->
测试
@org.junit.Test
public void peoTest() {
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
People people = (People) ac.getBean("peo");
System.out.println(people);
}
/*
运行结果:
People [name=wulala, age=18]
*/
注意:无论是实例工厂模式还是静态工厂模式,都需要对factory-method属性赋值,
只是静态工厂模式不需要事先注册工厂类,生成工厂对象,不需要为factory-bean属性赋值。
静态工厂模式只需要将class属性赋值为静态工厂类的全限定路径。
即只需要为class和factory-method属性赋值。