【Spring】IOC思想前导
作者:互联网
UserDao接口
package com.wang.dao; public interface UserDao { public void getUser(); }
UserDaoImpl实现类
public class UserDaoImpl implements UserDao { @Override public void getUser() { System.out.println("UserDao找到了指定用户"); } }
UserService接口
public interface UserService { public void getUser(); }
UserServiceImpl实现类
public class UserServiceImpl implements UserService { @Override
private UserDao dao=new UserDaoImpl();
public void getUser() { dao.getUser(); } }
在Service层,service通过组合模式将userDao接口来获取接口实现类,然后通过调用实现类的getUser方法 来实现service实现类的getUser方法
public class Test01 { @Test public void test_ioc_01(){ UserServiceImpl service = new UserServiceImpl(); service.getUser(); }
}
用户通过调用service实现类UserService的getUser方法来获取用户
此时用户想要通过MySQL数据库,或者Oracle数据库来获取用户
为此,我们需要创建对应UserDao实现类,并且修改UserService中的私有变量的指向
public class UserDaoMysqlImpl implements UserDao { @Override public void getUser() { System.out.println("通过MYSQL数据库找到了指定用户"); } }
修改UserServiceImpl类中局部变量dao的指向
private UserDao dao=new UserDaoMysqlImpl();
test调用结果
通过MYSQL数据库找到了指定用户 进程已结束,退出代码为 0
如果我们想要修改通过Oracle或者其他方式获取用户,我们不仅需要创建相应UserDao接口实现类,并且要手动修改UserService实现类中局部变量dao的指向。
当用户的需求不断变化时,需要程序员手动修改dao的指向
,明显增加了大量无用的操作,浪费时间浪费精力。
怎样才能做的更好,更懒,是我们的发展动力
看一下下面的操作
public class UserServiceImpl implements UserService { private UserDao dao; public void setDao(UserDao dao){ this.dao=dao; } @Override public void getUser() { dao.getUser(); } }
我们对dao的相关初始化进行了修改,我们通过暴露setDao方法,可以使得用户更改dao指向的实现类,这样就不需要程序员手动去修改dao的实现类了,实现了解耦合,我们可以通过单元测试 测试一下
@Test public void test_ioc_02(){ UserServiceImpl service = new UserServiceImpl(); service.setDao(new UserDaoMysqlImpl()); service.getUser(); service.setDao(new UserDaoOracleImpl()); service.getUser(); }
//通过MYSQL数据库找到了指定用户
//通过Oracle数据库找到了指定用户
//进程已结束,退出代码为 0
根据上面的例子我们可以发现:
在我们之前的业务中,用户的需求可能会影响我们原来的代码,我们根据用户的需求去修改原代码!
如果程序的代码量十分大,修改一次的成本代价十分昂贵!
我们使用一个Set接口实现,已经发生了革命性的变化!
private UserDao dao; public void setDao(UserDao dao){ this.dao=dao; }
- 之前,程序是主动创建对象,控制权在程序员手上!
- 使用了set注入后,程序不在具有主动性,而是变成了被动接受对象
这种思想,从本质上解决了问题,程序员不用再去管理对象的创建了,系统的耦合性大大降低了,可以更加专注的在业务的实现上!
通过了接口的调用。Dao层和Service层实现了解耦合
标签:UserDao,service,Spring,void,dao,getUser,前导,IOC,public 来源: https://www.cnblogs.com/WangGuangYuan/p/16342123.html