一、未使用spring前的麻烦

  • 开闭原则:扩展是开放的,但是对于修改是“封闭的”。

1、代码耦合度比较高【不符合开闭原则】:

public class EmployeeServiceImpl implements IEmployeeService {
private IEmployeeDAO dao;
public EmployeeServiceImpl() {
//创建依赖对象
dao = new EmployeeDAOJdbcImpl();
}
public void save() {
//TODO
}
}
  • 此时如果把IEmployeeDAO 的实现类换成 EmployeeDAOMyBatisImpl , 此时需要修改 EmployeeServiceImpl 的源代码,不符合开闭原则。

2、循环依赖问题(使用A类要先创建B类;使用B类要先创建C类;使用C类要先创建A类,循环啦。。。)

3、控制事务繁琐【不符合开闭原则】:

//增删改查的步骤重复了(打开资源、开启事务、提交事务、回滚事务、释放资源)
public class EmployeeServiceImpl implements IEmployeeService {
public void save() {
//打开资源
//开启事务
try {
//保存操作
//提交事务
} catch (Exception e) {
//回滚事务
} finally {
//释放资源
}
}
}
■ 模板基类:
  • 模板类:作为父类,处理通用算法功能,把不同的处理细节暴露给子类。
//模板基类:
public class BaseServiceTemplate implements IEmployeeService {
public void save() {
//打开资源
//开启事务
try {
this.doSave();
//提交事务
} catch (Exception e) {
//回滚事务
} finally {
//释放资源
}
} protected void doSave() {
//NOOP
}
} //子类
public class EmployeeServiceImpl extends BaseServiceTemplate implements IEmployeeService {
protected void doSave() {
//保存操作
}
}
■ 使用第三方框架运用太麻烦:
//使用mybatis框架
Person p = new Person();
SqlSession session = MyBatisUtil.getSession();
PersonMapper personMapper = session.getMapper(PersonMapper.class);
personMapper.insert(p);
session.commit();
session.close();

最新文章

  1. 在访问jsp时抛java.lang.IllegalArgumentException: Page directive: invalid value for import的原因
  2. 【凯子哥带你学Framework】Activity界面显示全解析
  3. google bookmarket api
  4. struts2 知识梳理
  5. 在Mybatis-spring中由于默认Autowired导致不能配置多个数据源的问题分析及解决
  6. Eclipse中svn图标不显示
  7. Django 从零開始
  8. iOS 获取高速随机路径sandbox目录
  9. HDU 2722 Here We Go(relians) Again (spfa)
  10. bzoj 4383: [POI2015]Pustynia
  11. 关于Android适配华为等带有底部虚拟按键的解决方案
  12. 【线段树】Bzoj1230 [Usaco2008 Nov]lites 开关灯
  13. BZOJ_3132_上帝造题的七分钟_树状数组
  14. python基础1--安装、package、数据类型
  15. WDA基础十六:ALV的颜色
  16. Win10提示无法创建新的分区也找不到现有的分区解法
  17. 【转】判断处理器是Big_endian的还是Little_endian的
  18. Codeforces Round #371 (Div. 2) C. Sonya and Queries 水题
  19. OCR学习及tesseract的一些测试
  20. TPO-21 C2 Which elective courses to take

热门文章

  1. Flask_Flask-Script脚本扩展的使用(八)
  2. Java|从Integer和int的区别认识包装类
  3. vue - public 引入 <script>报错 Uncaught SyntaxError: Unexpected token '<'
  4. js 使用 substr 和substring 的区别记录
  5. 使用Swing的GUI编程
  6. FastDFSJava客户端使用
  7. [SWPUCTF 2018]SimplePHP
  8. azure flask 测试
  9. c#操作符详解
  10. Oracle AWR报告采样分析