文章目录
2、IOC理念推导之传统业务
举个栗子:
1、传统的业务实现:
1.UserDao接口
2.UserDaoImpl实现类
 UserDaoMysqlImpl
 UserDaoOracleImpl
3.UserService业务接口
4.UserServiceImpl 业务实现类
1、在dao层写一个UserDao接口和一个实现类
package com.blackcat.dao;
public interface UserDao {
    void getUser();
}
package com.blackcat.dao;
public class UserDaoImpl implements UserDao {
    public void getUser() {
        System.out.println("默认获取用户的数据");
    }
}
 
2、在service层中编写一个接口:这个接口中调用dao层的方法
package com.blackcat.service;
public interface UserService {
    void getUser();
}
 
3、在service层中编写一个实现类:这个实现类,通过聚合的方式,调用 Dao层的功能。
public class UserServiceImpl implements UserService{
    private UserDao  userDao = new UserDaoImpl();
    public void getUser() {
        userDao.getUser();
    }
}
 
4、编写测试类 MyTest 测试我们的代码
public class MyTest {
    @Test
    public void testUser(){
        //用户实际调用的是业务层,dao层他们不需要接触!
        UserServiceImpl userService = new UserServiceImpl();
        userService.getUser();
    }
}
默认获取用户的数据
Process finished with exit code 0
 
2、如果我们要修改需求
1、比如业务层要实现dao层修改mysql数据库,或者oracle数据库的数据,我们需要改动原代码:
package com.blackcat.dao;
public class UserDaoMysqlImpl  implements UserDao{
    public void getUser() {
        System.out.println("Mysql获取用户数据!");
    }
}
package com.blackcat.dao;
public class UserDaoOracleImpl implements UserDao {
    public void getUser() {
		 System.out.println("Oracle获取用户数据!");
    }
}
//修改原代码
public class UserServiceImpl implements UserService{
    private UserDao  userDao = new UserDaoMysqlImpl();
    public void getUser() {
        userDao.getUser();
    }
}
 
2、思想:我们可以让我们的程序不动,让我们的客户端去做一些事情。
在我们之前的业务中,用户的需求可能会影响我们原来的代码,我们需要根据用户的需求去修改原代码!
如果程序代码量十分大,修改一次的成本代价十分昂贵!
3、我们使用一个set接口实现,发生了革命性的变化!
public class UserServiceImpl implements UserService{
    private UserDao  userDao;
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
    public void getUser() {
        userDao.getUser();
    }
}
 
-  
之前,程序主动创建对象,控制权在我们程序员手里。
 -  
后来,使用了set注入接口类型对象以后,程序不再具有主动性,只是被动地接受对象。
 
这种思想,在本质上解决了问题,我们程序猿不用再去管理对象的创建了,有什么好处?
4、好处:
大大降低了程序的耦合性,让我们程序员专注于业务的的实现上,这就是IOC的原型。








