@Spring5 IOC 思想推导
IOC (控制翻转)
把程序的控制权交给用户
具体例子及简单实现IOC:
现在项目中有,UserService,UserImpl,以及UserDao,UserDaoImp
//接口
interface UserDao
{
void insert(User user)
}
//-----------------------------------------
interface UserService
{
private UserServiceImpl userServiceImpl;
pubilc void addUser(User user);
}
//-----------------------------------------
//实现类
class UserDaoImp implement UserDao
{
void insert(User user)
{
sout("添加成功");
}
}
//-----------------------------------------
class UserServiceImpl implement UserService
{
private UserDaoImpl userDaoImpl = new UserDaoImpl();
pubilc void addUser(User user)
{
userDaoImpl.insert(user)
}
}
此时领导修改了需求,需要用户的更多功能,如何进行功能扩充。
添加了一个新的UserNewDaoImp;
class UserNewDaoImp implement UserDao
{
void insert(User user)
{
sout("添加或者更新成功");
}
}
我还需要改写UserServiceImp
private UserServiceImpl userServiceImpl;
//改写为
private UserNewDaoImp userNewDaoImp;
如果是在大项目中,这样一个功能的修改或扩展可能要面临非常大修改工作量,
这时,如果我们把UserServiceImp改为
class UserServiceImpl implement UserService
{
//这里改为接口来接收对象
private UserDao userDao;
//添加一个set方法
public void setUserDao(UserDao userDao)
{
this.userDao = userDao;
}
pubilc void addUser(User user)
{
userDaoImpl.insert(user)
}
}
这样就可以实现了在开发过程的功能扩展任意选择,
把实际调用对象交由用户来选择或操作,这是IOC思想的雏形。
在spring中实现控制翻转的是IOC容器 ,具体的实现方式是通过依赖注入,用户可以通过修改配置文件实现对程序的控制。