首页 > 其他 > 详细

IOC基础

时间:2020-07-23 21:42:49      阅读:65      评论:0      收藏:0      [点我收藏+]

转载自:https://mp.weixin.qq.com/s/VM6INdNB_hNfXCMq3UZgTQ

1.传统的实现方法

1.先实现一个接口

public interface UserDao {
   public void getUser();
}

2.写接口的实现类

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

3.写一个service接口,写上接口的抽象功能

public interface UserService {
   public void getUser();
}

4.最后写service接口的实现类,这里用于具体实现接口的功能

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

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

5.测试

@Test
public void test(){
   UserService service = new UserServiceImpl();
   service.getUser();
}

缺点:耦合性大,一旦需求更改,需要新增一个对userDao接口的实现,并且service实现类需要作出对应的修改

2.改进方法

在上述的第四部中,我们可以在不需要它的地方,不去实现它,而是留出一个接口,利用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();
   //那我们现在又想用Oracle去实现呢
   service.setUserDao( new UserDaoOracleImpl() );
   service.getUser();
}

3.总结

通过set注入的方式,我们实现了权限的反转.
以前的所有东西都是由程序去进行控制创建,而现在是由我们自己自行控制创建对象,把主动权限交给调用者,程序不用去管怎么创建,怎么实现了,它仅仅负责一个接口
这样的思想,本质上解决了问题,不在需要去管理对象的创建,更多的精力去关注业务的实现,耦合性大大的降低了

IOC基础

原文:https://www.cnblogs.com/evilposeidon/p/13367307.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!