Spring学习笔记02:IOC(Inversion of Control----控制反转)、DI(Dependency Injection----依赖注入)

一、什么是IOC(Inversion of Control----------控制反转)?

             IOC不是一种技术,而是一种编程思想(记住它是一种编程思想、编程思想、编程思想)那IOC为什么叫控制反转呢?控制什么?谁控制了谁?为什么要反转?这里要分成两个部分去解释——

             1.什么是控制?

                 讲到控制,要理解控制什么?谁控制了谁?-------在传统的Java开发中,我们创建对象总少不了去new一个,意味着这是由程序控制创建对象;而引入spring后,spring有一个专门的ioc容器来控制创建对象。控制什么?控制对象的创建和管理等等;谁控制了谁?spring ioc容器控制了对象

             2.什么是反转?

                 原本对象是由程序自己创建管理的,现在引入spring ioc容器后,对象由ioc容器去创建管理,程序编程被动接收由ioc容器创建的对象。这里的反转主要指创建对象的权限发生转移

总结一下:控制是指谁控制谁?反转则是权限的转移

二、什么是DI(Dependency Injection---依赖注入)

               1.依赖注入是控制反转的一个别名,从另一个角度解释控制反转。被注入的对象(程序)依赖于IoC容器创建的对象

               2.什么是依赖?--------主要指程序依赖于ioc容器

               3.什么是注入?--------ioc容器将程序依赖的对象注入到程序中

               4.依赖注入分为两种

                             1)构造注入

            第一步:创建一个类

//创建一个User类
public class User {
	public String userName;
	public String id;
	
	//构造注入必须要用到有参构造方法
	public User(String userName, String id) {
		super();
		this.userName = userName;
		this.id = id;
	}
	public String getUserName() {
		return userName;
	}
	public String getId() {
		return id;
	}
}

              第二步:创建applicationContext-core.xml配置文件 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	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
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context.xsd">

<!-- 构造注入 -->
	<bean id="user" class="com.spring.user.entity.User">
		<constructor-arg name="userName" value="张三"/>
		<constructor-arg name="id" value="20190327"/>
	</bean>

</beans>

             第三步:编写测试类

public class TestUser extends TestCase {
	//通过配置文件名获取配置上下文对象context,通过context对象来获取ioc容器构造注入产生的user对象
	//使用该对象,需要导入spring-context的jar包
	private ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-core.xml");
	
	@Test
	public void test01() {
		User user = null;//不用new一个对象,我们在下面用构造注入获取ioc容器创建的User对象
		user = (User) context.getBean("user");//此处通过你在applicationContext-core.xml文件中配置是的ID获取相应对象
		System.out.println("userName:"+user.getUserName()+"  id:"+user.getId());
	}
}

              最后一步:运行测试类,你会发现user对象的内容确实是ioc容器构造注入中配置的内容

                             2)setter注入

                 第一步:同样创建一个类

package com.spring.user.entity;

public class User {
	public String userName;
	public String id;
	
	//setter注入需要用到set方法和无参构造方法
	public User() {
		super();
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getUserName() {
		return userName;
	}
	public String getId() {
		return id;
	}
}

                      第二步:编写配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	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
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context.xsd">

<!-- setter注入 -->
	<bean id="user" class="com.spring.user.entity.User">
		<property name="userName" value="李四"/>
		<property name="id" value="20190328"/>
	</bean>

</beans>

                     第三步:编写测试类

public class TestUser extends TestCase {
	//通过配置文件名获取配置上下文对象context,通过context对象来获取ioc容器构造注入产生的user对象
	//使用该对象,需要导入spring-context的jar包
	private ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-core.xml");
	
	@Test
	public void test02() {
		User user = null;//不用new一个对象,我们在下面用构造注入获取ioc容器创建的User对象
		user = (User) context.getBean("user");//此处通过你在applicationContext-core.xml文件中配置是的ID获取相应对象
		System.out.println("userName:"+user.getUserName()+"  id:"+user.getId());
	}
}

                     第四步:运行测试类,你会发现user对象的内容确实是ioc容器中setter构造配置的内容

学习spring,你少不了看看文档的,这里有Spring框架中文文档5.1.3.RELEASE以及原汁原味的官方英文文档spring-framework-reference--------------------https://download.csdn.net/download/cholg/11065678

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值