理解控制反转
1、创建一个dao层
- 创建一个UserDao接口
package dao;
//dao层是调用数据库的
public interface UserDao {
void getUserDao();
}
- 创建一个UserDao的实现类UserDaoImpl
package dao;
public class UserDaoImpl implements UserDao{
public void getUserDao() {
System.out.println("获取UserDao");
}
}
- 创建一个UserDao的实现类UserDaoLinux
package dao;
public class UserDaoLinux implements UserDao{
public void getUserDao() {
System.out.println("获取UserDaoLinux");
}
}
- 创建一个UserDao的实现类UserDaoLinux
package dao;
public class UserDaoLinux implements UserDao{
public void getUserDao() {
System.out.println("获取UserDaoLinux");
}
}
- 创建一个UserDao的实现类UserDaoMySQL
package dao;
public class UserDaoMysql implements UserDao{
public void getUserDao() {
System.out.println("获取UserDaoMysql");
}
}
2、创建service层
- 创建UserService接口
package service;
//service是做业务处理的
public interface UserService {
void getUserService();
}
- 创建UserService接口的实现类UserServiceImpl
package service;
import dao.UserDao;
import dao.UserDaoImpl;
public class UserServiceImpl implements UserService{
//业务需要调用接口
private UserDao userDao;
//利用set注入的方法,实现动态值的植入
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void getUserService() {
userDao.getUserDao();
}
}
3、创建一个测试类
import dao.UserDaoLinux;
import service.UserServiceImpl;
public class Test {
public static void main(String[] args) {
UserServiceImpl userService = new UserServiceImpl();
userService.setUserDao(new UserDaoLinux());
userService.getUserService();
}
}
控制反转再理解
-
IOC是什么
Spring的IOC意思为控制反转,它不是什么技术,而是一种设计思想。它是将你设计好的对象交给Spring容器来控制,而不是由我来管理对象,给它赋值等等。 -
问题一:谁控制谁?控制什么
传统的面向对象思想对于构造对象最简单的方法无非就是在对象内部通过new对对象进行创建,是程序主动去创建依赖对象。
但IOC不同,IOC是专门有一个容器来创建、初始化这些对象,这些对象被称为Bean。谁控制谁? 是IOC容器控制住了对象,控 制了什么? 控制了bean的生命周期。 -
问题二:为何是反转,哪方面反转了
有反转就有正转,面向对象思想就是有我们在自己的对象中主动控制去直接获取依赖对象,这就是正转。而反转就是由Spring容器来创建及注入依赖对象。为何是反转? 因为有容器来自动的帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转。哪方面反转了? 依赖对象的获取被反转了。