1一乐
V1
2022/02/16阅读:63主题:默认主题
学习Spring5必知必会(1)~未使用spring前的麻烦
作者:一乐乐
欢迎大家来一乐乐的博客园
欢迎大家来一乐乐的博客园
一、未使用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一乐
V1