Spring5 理解IOC

理解ioc(控制反转)
我们先写一个UserDao的接口

public interface UserDao {
   public void getUser();
}

接着在写一个UserDao的实现类

public class UserDaoImpl implements UserDao {
   @Override
   public void getUser() {
       System.out.println("获取用户数据");
  }
}

然后在去写一个UserService的接口

public interface UserService {
   public void getUser();
}

然后在写一个UserService的实现类

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();
}

这是我们比较传统的写法,在用户不触碰Dao层的前提下可以通过这样的方法来,通过Servicec层来访问dao层

在以上基础上,在dao层里在加一个实现类UserDaoMysqlImpl

public class UserDaoMySqlImpl implements UserDao {
   @Override
   public void getUser() {
       System.out.println("MySql获取用户数据");
  }
}

如果我们要继续在service层里去调用UserDaoMysqlImpl,就需要在servise层修改UserServiceImpl

public class UserServiceImpl implements UserService {
   private UserDao userDao = new UserDaoMySqlImpl();

   @Override
   public void getUser() {
       userDao.getUser();
  }
}

如果我们要在dao层继续添加实现类,我们要继续在service的实现类里继续调用,责需要在UserServiceImpl里继续修改new 出添加的对象,架设需求量很大,这种方法就不适用了,每次变动就需要去修改大量代码,耦合性太高,牵一发而动全身,这样就不符合我们的开发理念

如何解决?
我们可以在UserService里,进行以下设置 留出一个set接口

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();
}

在这里问题已经发生了变化,以前所以东西都是由程序去创建,现在所以东西都是由我们自行创建,把主动权交给了调用者,程序不管如何创建只管如何实现,她只负责提供一个接口,耦合性大大降低,这就是IOC的原型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小徐404

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值