依赖注入(Dependency Injection,简称DI)与控制反转(IoC)的含义相同。
当某个java对象(调用者)需要调用另一个java对象(被调用用者,即被依赖对象)时,调用者采用new 被调用者 的方式创建对象,这样就会导致调用者与被调用者之间的耦合性增加,不利于后期项目的升级和维护。
使用Spring框架后,对象不再由调用者来创建,而是由Spring容器创建,Spring容器会负责控制器程序之间的关系,而不是由调用者的程序代码直接控制。这样控制权由应用代码转移到了Spring容器,控制权发生了反转,就是Spring的控制反转。
实现方式
1.创建接口
package com.itheima.ioc;
public interface UserService {
public void say();
}
2. 创建实现接口类
package com.itheima.ioc;
public class UserServiceImpl implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao)
{
this.userDao = userDao;
}
public void say(){
this.userDao.say();
System.out.println("userService say hello world!");
}
}
3.设置配置文件
<?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="userDao" class="com.itheima.ioc.UserDaoImpI">
<!-- collaborators and configuration for this bean go here -->
</bean>
<bean id="userService" class="com.itheima.ioc.UserServiceImpl">
<property name="userDao" ref ="userDao"></property>
<!-- collaborators and configuration for this bean go here -->
</bean>
</beans>
4创建测试类
package com.itheima.ioc;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestDI {
private static ApplicationContext applicationContext;
public static void main(String[] args) {
// TODO Auto-generated method stub
applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = (UserService)applicationContext.getBean("userService");
userService.say();
}
}
5.执行运行后,控制台输出