java 降低耦合_使用反射降低java中的耦合关系

新建一个 maven 工程,导入 mysql 包

mysql

mysql-connector-java

5.1.47

调用 jdbc

public static void main(String[] args) throws Exception {

// 1.注册驱动

DriverManager.registerDriver(new com.mysql.jdbc.Driver());

// 2.获取连接

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3307/test?useSSL=false", "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"));

}

// 6.释放资源

rs.close();

pstm.close();

conn.close();

}

程序运行一切良好。如果我们将 pom.xml 中的 mysql 包注释,程序就会发生编译错误

Error:(14, 56) java: 程序包com.mysql.jdbc不存在

这种用硬编码形式指定实例化具体的类,是一种强依赖关系,一旦依赖的类发生变动,就会编译失败

我们可以用以下方式进行改进:

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

Class.forName 的参数是字符串,即使所依赖的类不存在,也不会报编译错误,但运行时会报异常

这种方式可以在一定程度上进行解耦

此时的好处是,我们的类中不再依赖具体的驱动类,就算删除 mysql 的驱动 jar 包,依然可以编译(运行就不要想了,没有驱动不可能运行成功的)。

同时,也产生了一个新的问题,mysql 驱动的全限定类名字符串是在 java 类中写死的,一旦要改还是要修改源码。

解决这个问题也很简单,使用配置文件配置。

解耦的思路:

使用反射来创建对象,避免使用 new 关键字

通过读取配置文件来获取要创建的对象全限定类名

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值