原本由程序主动创建对象,主动权在程序员手上:
public interface UserDao {
void getUser();
}
`public class UserDaoMysqlIMp implements UserDao{
public void getUser() {
System.out.println("Mysql创建用户");
}
}``
public interface UserService {
void getUser();
}
public class UserServiceImp implements UserService{
private UserDao userDao = new UserDaoMysqlIMp();//每次多一个实现类,都需要程序员修改这里的实现对象
public void getUser() {
userDao.getUser();
}
}
//而这里用户调用则不需要改动,因为主动权在程序员手上
public class MyTest {
public static void main(String[] args) {
UserService userService = new UserServiceImp();
userService.getUser();
}
}
如果程序中有大量的实现类,那么程序员则需要修改大量的代码,会耗费昂贵的代价!
使用了IOC,如set注入之后,程序员不需要再去管理对象的创建,与之前的控制权反转了过来,主动权在用户手上:
public class UserServiceImp implements UserService{
private UserDao userDao;
//set注入
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void getUser() {
userDao.getUser();
}
}
//用户调用
public class MyTest {
public static void main(String[] args) {
UserService userService = new UserServiceImp();
//用户可以自己手动调用实现类,主动权在用户手中
((UserServiceImp)userService).setUserDao(new UserDaoMysqlIMp());
userService.getUser();
}
}
IOC是什么:
1)控制反转:把对象创建和对象之间的调用过程,交给Spring进行管理;
2)使用IOC目的:为了降低耦合度