IoC 理论推导 与 解释【Spring基础】
2021-03-05 14:29
标签:lock 依赖 如何 lan sqli 第三方 新建 public 设计思想 学一个东西首先我们要知道它是什么?所以: 控制反转 IoC ( Inversion of Control ),是一种设计思想,DI(依赖注入)是实现IoC的一种方法, 传统应用程序示意图: IoC/DI容器后程序结构示意图: 从前,程序是主动创建对象,控制权在程序员手中,有了ioc容器后,控制权在客户手中,由ioc容器去创建, 因此程序由原来的主动创建变成被动接收,所以被形容为控制反转(Inversion of Control IoC) 新建一个空白的maven项目 分析实现 我们先用我们原来的方式写一段代码 . 1、先写一个UserDao接口 2、再去写Dao的实现类 3、然后去写UserService的接口 4、最后写Service的实现类 5、测试一下 这是我们原来的方式 , 开始大家也都是这么去写的对吧 . 那我们现在修改一下 . 把Userdao的实现类增加一个 . 紧接着我们要去使用MySql的话 , 我们就需要去service实现类里面修改对应的实现 在假设, 我们再增加一个Userdao的实现类 . 那么我们要使用Oracle , 又需要去service实现类里面修改对应的实现 . 假设我们的这种需求非常大 , 这种方式就根本不适用了, 甚至反人类对吧 , 每次变动 , 都需要修改大量代码 . 这种设计的耦合性太高了, 牵一发而动全身 . 那我们如何去解决呢 ? 我们可以在需要用到他的地方 , 不去实现它 , 而是留出一个接口 , 利用set , 我们去代码里修改下 . 现在去我们的测试类里 , 进行测试 ; IoC 理论推导 与 解释【Spring基础】 标签:lock 依赖 如何 lan sqli 第三方 新建 public 设计思想 原文地址:https://www.cnblogs.com/IanIan/p/14320703.htmlIOC 是什么?
也有人认为DI只是IoC的另一种说法。没有IoC的程序中 , 我们使用面向对象编程 , 对象的创建与对象间的依赖关系完全
硬编码在程序中,对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方,个人认为所谓控制反转就是:获得依赖对象的方式反转了。
IoC的优点
解耦
测试步骤:
public interface UserDao {
public void getUser();
}
public class UserDaoImpl implements UserDao {
@Override
public void getUser() {
System.out.println("获取用户数据");
}
}
public interface UserService {
public void getUser();
}
public class UserServiceImpl implements UserService {
private UserDao userDao = new UserDaoImpl();
@Override
public void getUser() {
userDao.getUser();
}
}
@Test
public void test(){
UserService service = new UserServiceImpl();
service.getUser();
}
public class UserDaoMySqlImpl implements UserDao {
@Override
public void getUser() {
System.out.println("MySql获取用户数据");
}
}
public class UserServiceImpl implements UserService {
private UserDao userDao = new UserDaoMySqlImpl();
@Override
public void getUser() {
userDao.getUser();
}
}
public class UserDaoOracleImpl implements UserDao {
@Override
public void getUser() {
System.out.println("Oracle获取用户数据");
}
}
public class UserServiceImpl implements UserService {
private UserDao userDao;
// 利用set实现
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void getUser() {
userDao.getUser();
}
}
@Test
public void test(){
UserServiceImpl service = new UserServiceImpl();
service.setUserDao( new UserDaoMySqlImpl() );
service.getUser();
//那我们现在又想用Oracle去实现呢
service.setUserDao( new UserDaoOracleImpl() );
service.getUser();
}
上一篇:python解释器的下载
下一篇:Python-随记
文章标题:IoC 理论推导 与 解释【Spring基础】
文章链接:http://soscw.com/index.php/essay/60486.html