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