其他分享
首页 > 其他分享> > 【Spring】IOC思想前导

【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;
    }

这种思想,从本质上解决了问题,程序员不用再去管理对象的创建了,系统的耦合性大大降低了,可以更加专注的在业务的实现上!

 

 

 

通过了接口的调用。Dao层和Service层实现了解耦合

 

标签:UserDao,service,Spring,void,dao,getUser,前导,IOC,public
来源: https://www.cnblogs.com/WangGuangYuan/p/16342123.html