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配置文件 





	
		
		
	


             第三步:编写测试类

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;
	}
}

                      第二步:编写配置文件





	
		
		
	


                     第三步:编写测试类

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

你可能感兴趣的:(IOC,DI,Spring,spring)