Spring-0-关于控制反转(IOC)理论

在一个普通的项目中会设计Dao层、Service层。Dao层主要做数据持久层的工作,负责与数据库进行交互的工作都封装在此,在该层首先定义接口类,然后定义实现类。Service层主要负责业务模块的设计,同样先设计接口,然后定于实现类,在Service层的业务中,都要调用Dao层定义的接口。
在这里插入图片描述
在Dao层定义的接口

package xyz.bryce.dao;

public interface userDao {
    public void getUser();
}

Dao定义的实现类

package xyz.bryce.dao;

public class userDaoImpl implements userDao {
    @Override
    public void getUser() {
        System.out.println("输出用户信息");
    }
}

Service层定义的接口

package xyz.bryce.service;

public interface userService {
    public void getUser1();
}

Service层定义的实现类,在Service层的具体业务中调用Dao层的功能。

package xyz.bryce.service;
import xyz.bryce.dao.userDao;
import xyz.bryce.dao.userDaoImpl;

public class userServiceImpl implements userService {

    private userDao user = new userDaoImpl();
    @Override
    public void getUser1() {
        user.getUser();
    }
}

在测试上面userServiceImpl类时,输出获取用户信息
当在Dao层再增加一个Dao接口的实现类如下:

package xyz.bryce.dao;
public class userDaoStuImpl implements userDao{
    @Override
    public void getUser() {
        System.out.println("获取学生信息");
    }
}

然后在Service层中使用该新增类时,就要更改对应类:

package xyz.bryce.service;

import xyz.bryce.dao.userDao;
import xyz.bryce.dao.userDaoImpl;
public class userServiceImpl implements userService {
    private userDao user = new userDaoStuImpl(); //private userDao user = new userDaoStuImpl();
    @Override
    public void getUser1() {
        user.getUser();
    }
}

测试该类时,输出获取学生信息
可以看到,每在Dao层增加一个新的实现类的时候,就要相应的在Service层改源码。模块之间的耦合性较高。

更改一下Service层实现类

public class userServiceImpl implements userService {
    private userDao user;
    public void setUser(userDao user) {
        this.user = user;
    }
    @Override
    public void getUser1() {
        user.getUser();
    }
}

原来的实现类直接将要处理的那个Dao层中的业务限制不变,而现在通过改用set方法,具体使用Dao层中的哪个实现类目前也不确定,只能通过其他程序调用该类时通过传参确定,被动的接受对象。程序被动的获取对象,而不需要主动的new对象。这就是IOC的原型。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值