1.依赖注入
DI全称是Dependence Injection,中文称之为依赖注入。它与控制反转(IoC)的含义相同,只不过两个称呼是从两个角度描述的同一个概念;
IoC:使用spring框架之后,对象的实例是由spring的容器创建的;
SI:从spring容器角度来看,spring容器负责将依赖对象赋值给调用者的成员变量,这相当于调用者注入了它的依赖的实例,这就是spring的依赖注入。
2.使用setter方法实现依赖注入
- 在com.itheima.ioc包中,创建接口UserService,在接口编写一个say()方法;
package com.itheima.ioc;
public interface UserService {
public void say();
}
- 在com.itheima.ioc包下,创建UserService接口实现类UserServiceImpl,在类中声明userDao属性,并添加属性的setter方法;
package com.itheima.ioc;
public class UserServiceImpl implements UserService {
//声明UserDao类
private UserDao userDao;
//添加say()方法:添加UserDao属性的setter方法,用来实现依赖注入
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void say() {
// TODO Auto-generated method stub
//调用userDao中say()方法,执行输出语句
this.userDao.say();//调用语句
System.out.println("userService say Hello World!");
}
}
- 在配置文件applicationContext.xml中,创建一个id为userService的Bean,该Bean用于实例化UserServiceImpl类的信息,并将userDao的实力注入到userService中;
<!-- 添加id为userService的实例 -->
<bean id="userService" class="com.itheima.ioc.UserServiceImpl">
<!-- 将id为userDao的Bean实例注入到userService实例中 -->
<property name="userDao" ref="userDao"></property>
</bean>
- 编写测试类
public class TestDI {
public static void main(String[] args) {
//1.初始化spring容器,加载配置文件
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
//2.通过容器获取UserService实例
UserService userService=(UserService) applicationContext.getBean("userService");
//3.调用示例中的say()方法
userService.say();
}
}