Sprng学习-Spring容器中创建对象的方式

前言

众所周知,Spring的核心技术是IOC容器,利用其可以更方便的创建和管理对象之间的依赖关系,所以今天详细讲解IOC容器创建对象的主要方式来加以理解。

创建对象的3种主要方式:

  • 无参构造器创建对象
  • 有参构造器创建对象
  • 工厂类创建对象

1.使用无参构造函数创建对象

它是最基本的对象创建方式,调用的是默认的无参构造器,代码如下

Person.java

package pojo;

public class Person {
	private String name;
	private int age;

	public Person() {
		super();
		System.out.println("无参构造器创建Person");
	}

	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
		System.out.println("有参构造器创建Person");
	}

	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 "Person [name=" + name + ", age=" + age + "]";
	}

}

applicationContext.xml 配置如下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
	
	<!-- 配置Person类,框架在底层使用反射的机制,执行无参构造器创建对象 -->
	<bean name="person" class="pojo.Person">
		<property name="name" value="刘三刀"></property>
		<property name="age" value="20"></property>
	</bean>
</beans>

测试:

@Test
public void test03() {
        // 创建IOC容器对象
	ApplicationContext ac = new ClassPathXmlApplicationContext("applicatonContext.xml");
        // 获取容器中的对象
	Person person = (Person) ac.getBean("person");
	System.out.println(person);
}

测试结果:

2.使用有参构造函数创建对象

调用Person的有参构造器,包含参数有name、age,在默认情况下执行有参构造器

<!-- 带参构造函数创建Person类 -->
<bean name="person1" class="pojo.Person">
	<!-- constructor-arg:有参构造的属性
		index:表示构造器参数的索引位置
		type:参数类型
		value:赋值  -->
	<constructor-arg index="0" type="java.lang.String" value="刘四刀" />
	<constructor-arg index="1" type="int" value="22" />
</bean>

 测试结果:

在对象创建的过程中,还可以使用配置文件中存在的对象来引入到其他对象中,通过ref来引入对象,如下所示。

<!-- ref的使用 -->
<bean name="str" class="java.lang.String">
	<constructor-arg value="刘五刀" />
</bean>
<bean name="person2" class="pojo.Person">
	<constructor-arg index="0" type="java.lang.String" ref="str" />
	<constructor-arg index="1" type="int" value="23" />
</bean>

3.通过工厂类创建对象

工厂类分为实例工厂静态工厂来创建对象,先创建Factory类

// 工厂类
public class Factory {
	// 实例工厂
	public Person getPerson() {
		return new Person("实例工厂创建对象",1);
	}
	// 静态工厂,关键字static
	public static Person getStaticPerson() {
		return new Person("静态工厂创建对象",2);
	}
}
  1. 实例工厂配置
<!-- 创建工厂bean -->
<bean name="factory" class="pojo.Factory"></bean>
<!-- 使用Factory类的实例方法getPerson,factory-bean指定工厂类,factory-method指定方法 -->
<bean name="person3" factory-bean="factory" factory-method="getPerson"></bean>

     2.静态方法配置

<!-- 使用Factory类的静态方法,类只会被加载,不会被实例化,class指定工厂类(与实例不同的地方),factory-method指定静态方法(必须) -->
<bean name="person3" class="pojo.Factory" factory-method="getStaticPerson"></bean>

 以上是鄙人对IOC容器创建对象的一些见解,如有纰漏,请指出。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值