Spring学习笔记(三)

什么是DI依赖注入?

Spring动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的。比如对象A需要操作数据库,以前我们总是要在A中自己编写代码来获得一个Connection对象,有了 Spring我们就只需要告诉Spring,A中需要一个Connection,至于这个Connection怎么构造,何时构造,A不需要知道。在系统运行时,Spring会在适当的时候制造一个Connection,然后像打针一样,注射到A当中,这样就完成了对各个对象之间关系的控制。A需要依赖 Connection才能正常运行,而这个Connection是由Spring注入到A中的,依赖注入的名字就这么来的。那么DI是如何实现的呢? Java 1.3之后一个重要特征是反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,Spring就是通过反射来实现注入的。

简单来说什么是依赖注入,就是给属性赋值(包括基本数据类型和引用数据类型)。

利用 set 方法给属性赋值

创建Student实体类,示例代码如下:

package com.hlbdx.spring;


public class Student {

	private String uuid;
	private Integer age;

	public String getUuid() {
		return uuid;
	}

	public void setUuid(String uuid) {
		this.uuid = uuid;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

}

创建Classes实体类,示例代码如下:

package com.hlbdx.spring;

import java.util.List;


public class Classes {

	private String uuid;
	private String cNum;
	private String cName;
	private List<Student> students;

	public String getUuid() {
		return uuid;
	}

	public void setUuid(String uuid) {
		this.uuid = uuid;
	}

	public String getcNum() {
		return cNum;
	}

	public void setcNum(String cNum) {
		this.cNum = cNum;
	}

	public String getcName() {
		return cName;
	}

	public void setcName(String cName) {
		this.cName = cName;
	}

	public List<Student> getStudents() {
		return students;
	}

	public void setStudents(List<Student> students) {
		this.students = students;
	}

}

在spring 配置文件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-4.3.xsd">

	<bean id="student" class="com.hlbdx.spring.Student">
		<property name="uuid" value="1"></property>
		<property name="age" value="25"></property>
	</bean>
	<bean id="classes" class="com.hlbdx.spring.Classes">
		<property name="uuid" value="1"></property>
		<property name="cNum" value="1001"></property>
		<property name="cName" value="中华一班"></property>
		<property name="students">
			<list>
				<ref bean="student" />
			</list>
		</property>
	</bean>

</beans>

测试代码:

package com.hlbdx.spring;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {

	public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext(
				"applicationContext.xml");
		Classes classes = (Classes) context.getBean("classes");
		System.out.println(classes);

	}

}

测试结果:

利用构造函数给属性赋值

改造Student实体类,示例代码如下:

package com.hlbdx.spring;


public class Student {

	private String uuid;
	private Integer age;

	public Student(String uuid, Integer age) {
		this.uuid = uuid;
		this.age = age;
	}

	@Override
	public String toString() {
		return "Student [uuid=" + uuid + ", age=" + age + "]";
	}

}

改造Classes实体类,示例代码如下:

package com.hlbdx.spring;

import java.util.List;


public class Classes {

	private String uuid;
	private String cNum;
	private String cName;
	private List<Student> students;

	public Classes(String uuid, String cNum, String cName,
			List<Student> students) {
		this.uuid = uuid;
		this.cNum = cNum;
		this.cName = cName;
		this.students = students;
	}

	@Override
	public String toString() {
		return "Classes [uuid=" + uuid + ", cNum=" + cNum + ", cName=" + cName
				+ ", students=" + students + "]";
	}

}

在spring 配置文件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-4.3.xsd">

	<bean id="student" class="com.hlbdx.spring.Student">
		<constructor-arg index="0" value="1"></constructor-arg>
		<constructor-arg index="1" value="25"></constructor-arg>
	</bean>

	<bean id="classes" class="com.hlbdx.spring.Classes">
		<constructor-arg index="0" value="1"></constructor-arg>
		<constructor-arg index="1" value="1001"></constructor-arg>
		<constructor-arg index="2" value="中华一班"></constructor-arg>
		<constructor-arg index="3">
			<list>
	                     <ref bean="student" />
			</list>
		</constructor-arg>
	</bean>

</beans>

测试代码如下:

package com.hlbdx.spring;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {

	public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext(
				"applicationContext.xml");
		Classes classes = (Classes) context.getBean("classes");
		System.out.println(classes);

	}

}

测试结果:

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值