本文共 800 字,大约阅读时间需要 2 分钟。
1、便于代码维护
2、降低模块依赖,修改一个模块不影响另一个模块
3、提高代码扩展性
4、提高代码重用性
一、使用反射创建对象,而避免使用 new 关键字(反射技术)
//1、使用获取类的方式来加载驱动DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());//2、使用反射方式来加载驱动Class.forName("com.mysql.cj.jdbc.Driver");
1、使用获取类的方式来加载驱动的话,如果没有导入相关包的时候,编译时就会报错,更不用说运行了
2、使用反射方式来加载驱动的话,编译时是完全没有问题的,因为此时它只是一个字符串,只有运行的
时候才会报错
二、通过读取配置文件来获取相关属性值
Class.forName("com.mysql.cj.jdbc.Driver");
接下来我们再看这个使用反射方式加载驱动的代码,
编译是没有问题了,**但是 **"com.mysql.cj.jdbc.Driver"加载的数据库驱动写死了,
当我们需要更改连接连接其他数据库种类的时候,就必须到此处修改,代码多的时候会出现不好找或者
不小心修改错误而导致运行错误,从而直接修改是存在一定隐患的。
所以我们可以读取配置文件来获取相关属性,所有相关的属性变量都在配置文件修改,无需改动属
性所在的类
三、动态代理(JDK基于接口的动态代理(new Proxy.newInstance),cglib基于子类的动态代理 (
Enhancer.create)
动态代理:不修改源码的基础上对已有方法增强
执行过程:
1、创建 被代理对象接口 的代理类
2、获取代理类调用接口方法
3、间接调用invoke()方法,里面除了有该业务层的方法外,还有其它数据处理的相关代码
4、如果被代理方法有返回值则声明返回值
转载地址:http://fdern.baihongyu.com/