Spring框架----IOC的概念和作用之程序的耦合和解耦

38 篇文章 1 订阅
23 篇文章 2 订阅

1.编译期的依赖

请看如下程序(程序运行在idea中,导入过mysql驱动)

//1.注册驱动
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
//程序运行没有上面的jar是不行的
//2.获取连接
Connection conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/springdb","root","root");
//3.获取操作数据库的预处理对象
PreparedStatement pstm=conn.prepareStatement("select * from account");
//4.执行SQL,得到结果集
ResultSet rs=pstm.executeQuery();
//5.封装或者遍历结果集
while(rs.next()){
    System.out.println(rs.getString("name"));
}
rs.close();
pstm.close();
conn.close();

如果将pom.xml中的MySQL驱动给注释掉,就会报错,提示程序包com.mysql.jdbc不存在。编译的时候就会遇到错误,是编译期错误。
编译期的报错,说明没有依赖的情况下,是不能正常编译的。
这个特性,我们称之为程序的耦合。
耦合:理解为程序之间的依赖关系
包括类之间的依赖、方法间的依赖
解耦:降低程序间的依赖关系

本程序在编译期就依赖于别的类或者jar包,那么它的独立性就非常差
实际开发中,应该做到编译期不依赖,运行时才依赖
所以我们可以改成

Class.forName("com.mysql.jdbc.Driver");

在这一段大类的代码中,它是一个字符串,我们不再依赖于具体的驱动类,那么这个时候,我们这个类就可以做一个独立,但是目前还不能运行。此时它是个运行时异常。编译起没有问题。如果注释解除,那么就可以正常运行

2.解耦的思路

第一步:使用反射来创建对象,而避免使用new关键字
这样的话一个依赖于具体的驱动类,一个依赖字符串,可以减少他们之间的耦合。
但是这个时候又导致了一个新的问题,字符串写死了,如果换成Oracle,那这个驱动还是需要修改。
第二步:通过读取配置文件来获取要创建的对象全限定类名。然后再利用反射创建对象。
例如,我们在建立以下工程
在这里插入图片描述
其业务层的实现类
在这里插入图片描述
还是我们之前的方式
表现层的代码

//模拟表现层,用于调用业务层,实际开发中,应该是servlet
public class Client {
    public static void main(String[] args) {
        IAccountService as=new AccountServiceImpl();
        as.saveAccount();
    }
}

这个时候,运行时正常的,能输出我们想要的代码,但是这里面有着严重的依赖关系,业务层调用持久层,表现层调用业务层。
这个有很强的耦合性,使我们代码的独立性很差
我们使用工厂模式来解决这个问题
当我们把实现类删掉的时候,就是编译器异常,无法运行。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值