2.IOC和DI

**IOC和DI的概念和区别(面试题)**
	
	1. IOC和DI的概念
		* IOC		-- Inverse of Control,控制反转,将对象的创建权反转给Spring!!
		* DI		-- Dependency Injection,依赖注入,在Spring框架负责创建Bean对象时,动态的将依赖对象注入到Bean组件中!!
	
	2.  DI(依赖注入)
		* 例如:如果UserServiceImpl的实现类中有一个属性,那么使用Spring框架的IOC功能时,可以通过依赖注入把该属性的值传入进来!!
		* 具体的配置如下
			<bean id="us" class="com.itheima.demo1.UserServiceImpl">
				<property name="uname" value="小风"/>
			</bean>

applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入schema的约束 -->
<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">

	<!-- 先配置dao -->
	<bean id="ud" class="demo1.UserDaoImpl"></bean>

	<!-- 需要配置具体的Bean -->
    <bean id="userService" class="demo1.UserServiceImpl">
    	<!-- 依赖注入:给uname的属性传入值 -->
    	<property name="uname" value="张三"></property>
    	
    	<!-- ref值指的是bean中的id,name指的是bean中的属性 -->
    	<property name="userDao" ref="ud"></property>
    </bean>
    
</beans>

UserDaoImpl:

package demo1;

public class UserDaoImpl {

	public void save(){
		System.out.println("向数据库中添加用户的数据");
	}
}

UserServiceImpl:

package demo1;

public class UserServiceImpl implements UserService{
	
	//UserServiceImpl中包含属性
	private String uname;
	public void setUname(String uname) {
		this.uname = uname;
	}

	//定义一个成员变量
	private UserDaoImpl userDao;
	public void setUserDao(UserDaoImpl userDao) {
		this.userDao = userDao;
	}

	public void save() {
		System.out.println("UserServiceImpl执行了"+uname);	
		
		//传统方式
		/*UserDaoImpl dao=new UserDaoImpl();
		dao.save();*/
		
		//调用保存的方法
		userDao.save();
	}
}

SpringDemo1:

package demo1;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringDemo1 {

	/**
	 * 传统的方式
	 */
	@Test
	public void run1(){
		//传统方式
		UserService us=new UserServiceImpl();
		us.save();
	}
	
	/**
	 * 使用spring的IOC的方式
	 */
	@Test
	public void run2(){
			
		//获取spring的工厂对象
		ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
		//从工厂中获取具体的Bean实例对象,参数为配置文件中的id值
		UserService us = (UserService) ac.getBean("userService");
		us.save();
	}
}

  

  

  

  

posted @ 2018-03-13 14:39  一日看尽长安花cxjj  阅读(143)  评论(0)    收藏  举报