在java编程过程中经常会出现代码耦合性过强导致修改和维护代码时很困难。代码耦合产生的原因就是在类中直接new创建对象。一旦创建的对象发生修改,整个代码可以就需要进行更改。
解决的方法:
1.一般可以通过工厂模式解耦合:
//接口
public interface Type {}
//实现类
public class TypeC implements Type {}
//工厂
public class TypeFactory {
public static Type getInstance(){
return new TypeC();
}
public static void main(String[] args) {
Type type = TypeFactory.getInstance();
}
}
这里如果TypeC发生改变,只需要更改工厂里面的genInstance函数,后面的逻辑部分代码不用变更。工厂就是生产者和消费者之间的缓冲带和隔离区,唯一的不足就是需要编写统一的工厂类。
2.spring的核心技术之一:Spring IoC/DI 依赖注入(容器)
DI更直观的说法可以叫做容器,就是把你可能需要的java类都提前放到这个容器中去,你需要什么就做个新的给你,使用的具体方法就是写applicationContext.xml配置文件。
2.1如何写和使用applicationContext.xml配置文件
项目中通过Web层(action) => 业务层(biz)=> 持久层(dao)的调用顺序完成,其中业务层可以看到接口IStudentBiz有两个实现类,通过在xml文件中将各个类注入,实现解耦合功能的实现。
public static void main(String[] args) {
// //默认文件路径是resources下那一级
// ApplicationContext ctx = new ClassPathXmlApplicationContext("com/study/ssm/chapter3/task3/applicationContext-dao.xml");
//这个类,默认获取的是项目路径,默认文件路径是项目名下一级,与src同级。
ApplicationContext ctx = new FileSystemXmlApplicationContext("src/main/java/com/study/ssm/chapter3/task3/applicationContext-dao.xml");
// //如果前边加了file:则说明后边的路径就要写全路径了,就是绝对路径
// ApplicationContext ctx = new FileSystemXmlApplicationContext("file:/Users/zhanggong/IdeaProjects/SSM/src/main/java/com/study/ssm/chapter3/task3/applicationContext-dao.xml");
StudentAction studentAction = (StudentAction) ctx.getBean("studentAction");
studentAction.printName();
}
xml文件的读取的方式有上面的几种,可以视情况自己更改。
解耦合的具体实现:当studentAction所依赖的类studentBiz发生了改变,变成了studentBiz2。这里只需要将bean中的property改变即可:
注:
bean标记:id表示对类命令,class表示定义的是哪一个类;
property标记:name定义类中对应的setter方法;ref定义传递给setter方法的实例对象。
总结:
借助spring框架,可以让开发人员只需要针对接口编程,在测试或者使用时只需要在配置文件中定义好就行,就算修改代码,也不会对其他人的代码产生影响。