一、未使用spring前的麻烦

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

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

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

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

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

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

学习Spring5必知必会(1)~未使用spring前的麻烦的更多相关文章

  1. [ 学习路线 ] 2015 前端(JS)工程师必知必会 (2)

    http://segmentfault.com/a/1190000002678515?utm_source=Weibo&utm_medium=shareLink&utm_campaig ...

  2. 《SQL必知必会》学习笔记二)

    <SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语 ...

  3. 学习《SQL必知必会(第4版)》中文PDF+英文PDF+代码++福达BenForta(作者)

    不管是数据分析还是Web程序开发,都会接触到数据库,SQL语法简洁,使用方式灵活,功能强大,已经成为当今程序员不可或缺的技能. 推荐学习<SQL必知必会(第4版)>,内容丰富,文字简洁明快 ...

  4. 《MySQL必知必会》学习笔记——前言

    前言 MySQL已经成为世界上最受欢迎的数据库管理系统之一.无论是用在小型开发项目上,还是用来构建那些声名显赫的网站,MySQL都证明了自己是个稳定.可靠.快速.可信的系统,足以胜任任何数据存储业务的 ...

  5. 《SQL必知必会》学习笔记整理

    简介 本笔记目前已包含 <SQL必知必会>中的所有章节. 我在整理笔记时所考虑的是:在笔记记完后,当我需要查找某个知识点时,不需要到书中去找,只需查看笔记即可找到相关知识点.因此在整理笔记 ...

  6. 《SQL必知必会》学习笔记(一)

    这两天看了<SQL必知必会>第四版这本书,并照着书上做了不少实验,也对以前的概念有得新的认识,也发现以前自己有得地方理解错了.我采用的数据库是SQL Server2012.数据库中有一张比 ...

  7. mysql学习--mysql必知必会1

     例如以下为mysql必知必会第九章開始: 正則表達式用于匹配特殊的字符集合.mysql通过where子句对正則表達式提供初步的支持. keywordregexp用来表示后面跟的东西作为正則表達式 ...

  8. mysql学习--mysql必知必会

      上图为数据库操作分类:     下面的操作參考(mysql必知必会) 创建数据库 运行脚本建表: mysql> create database mytest; Query OK, 1 row ...

  9. 数据库学习之中的一个: 在 Oracle sql developer上执行SQL必知必会脚本

    1 首先在開始菜单中打开sql developer: 2. 创建数据库连接 点击左上角的加号 在弹出的对话框中填写username和password 測试假设成功则点击连接,记得角色要写SYSDBA ...

随机推荐

  1. 初识python: 斐波拉契数(生成器获取)

    使用  生成器(yield) 获取斐波拉契数. 代码如下: def fun(n): a,b,c = 0,0,1 while a < n: yield b # b, c = c, b + c 以下 ...

  2. unittest_TestSuite测试套件(2)

    在前面一章中演示了unittest如何执行一个简单的测试,但有两个问题: 我们知道测试用例的执行顺序是根据测试用例名称顺序执行的,在不改变用例名称的情况下,我们怎么来控制用例执行的顺序呢? 一个测试文 ...

  3. Cannot uninstall 'pyparsing'. It is a distutils installed project

    我的环境: [root@ansible ~]# python -V Python 2.7.5 [root@ansible ~]# cat /etc/redhat-release CentOS Linu ...

  4. PyCharm - 关联mysql失败 - Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' property manually.

    时区错误,MySQL默认的时区是UTC时区,比北京时间晚8个小时. 所以要修改mysql的时长 在mysql的命令模式下,输入: set global time_zone='+8:00'; 再次连接成 ...

  5. 使用 try-catch

    ECMA-262 第 3 版引入了 try-catch 语旬,当 try-catch 语句中发生错误时, 浏览器会认为错误已经被处理了 ,因而不会报告错误.对于那些不要求用户懂技术,也不需要用户理解错 ...

  6. SQL高级优化(一)之MySQL优化

    不同方案效率对比 MySQL各字段默认长度(一字节为8位) 整型: TINYINT 1 字节 SMALLINT 2 个字节 MEDIUMINT 3 个字节 INT 4 个字节 INTEGER 4 个字 ...

  7. 服务限流 -- 自定义注解基于RateLimiter实现接口限流

    1. 令牌桶限流算法 令牌桶会以一个恒定的速率向固定容量大小桶中放入令牌,当有浏览来时取走一个或者多个令牌,当发生高并发情况下拿到令牌的执行业务逻辑,没有获取到令牌的就会丢弃获取服务降级处理,提示一个 ...

  8. FFT 傅里叶万岁

    FFT --- Fast Foulier Transformation 以 $O(n \log n)$ 的速度计算 $\forall k=1,2,\dots,n, c[k]=\sum\limits_{ ...

  9. Visual Studio 2015 MFC之Button颜色变化-断点调试(Debug)

    软件开发,对自己的程序进行调试很重要,本次文章在上一边随笔的基础上,介绍一下Button控件做显示灯的用法,Button控件的添加和变量设置等可以参考下面的的链接:Visaul Studio 2015 ...

  10. 如何使用Github搭建自己的博客

    1.前期准备 sudo apt-get install npm sudo npm install hexo -g 首先使用如下命令创建项目,name是你要创建的博客的名字: hexo init {na ...