JavaEE「五」Spring事务管理
对于JDBC而言,我们肯定不会陌生,我们在初学的时候肯定写过非常非常多的JDBC模板代码!
5.1 回顾对模版代码优化过程
我们来回忆一下我们怎么对模板代码进行优化的!
首先来看一下我们原生的JDBC:需要手动去数据库的驱动从而拿到对应的连接..
try { String sql = "insert into t_dept(deptName) values('test');"; Connection con = null; Statement stmt = null; Class.forName("com.mysql.jdbc.Driver"); // 连接对象 con = DriverManager.getConnection("jdbc:mysql:///hib_demo", "root", "root"); // 执行命令对象 stmt = con.createStatement(); // 执行 stmt.execute(sql ...
JavaEE「四」Spring AOP
4.1 代理模式
代理模式的定义:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。
为什么要用代理模式?
中介隔离作用:在某些情况下,一个客户类不想或者不能直接引用一个委托对象,而代理类对象可以在客户类和委托对象之间起到中介的作用,其特征是代理类和委托类实现相同的接口。
开闭原则:回顾上一章说的设计原则,代理模式遵循的是开闭原则的设计思想。代理类除了是客户类和委托类的中介之外,我们还可以通过给代理类增加额外的功能来扩展委托类的功能,这样做我们只需要修改代理类而不需要再修改委托类,符合代码设计的开闭原则。代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后对返回结果的处理等。代理类本身并不真正实现服务,而是同过调用委托类的相关方法,来提供特定的服务。真正的业务功能还是由委托类来实现,但是可以在业务功能执行的前后加入一些公共的服务。例如我们想给项目加入缓存、日志这些功能,我们就可以使用代理类来完成,而没必要打开已经封装好的委托类。
有哪几种代理模式?
我们有多种不同的方式来实现代理。如果按照代理创建的 ...
JavaEE「三」Spring IOC
3.1 设计原则与IOC、DI
面向对象的程序设计中有六大基本原则:
单一职责原则——SRP
一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。
开闭原则——OCP
软件实体应当对扩展开放,对修改关闭。
里式替换原则——LSP
所有引用基类的地方必须能透明地使用其子类的对象。
依赖倒置原则——DIP
高层模块不应该依赖底层模块,它们都应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象。
接口隔离原则——ISP
客户端不应该依赖那些它不需要的接口。
迪米特原则——LOD
一个对象应该对其他对象有最少的了解
合成复用原则——CARP
优先使用对象组合,而不是继承来达到复用的目的。
Spring的IOC(控制反转)就是遵循了依赖倒置原则的设计思想。
2004年,Martin Fowler探讨了同一个问题,既然IOC是控制反转,那么到底是“哪些方面的控制被反转了呢?”,经过详细地分析和论证后,他得出了答案:“获得依赖对象的过程被反转了”。控制被反转之后,获得依赖对象的过程由自身管理变为了由IOC容器主动注入。于是,他给“控制反转”取了一个更合适的名字叫做“依赖注入(Dep ...
JavaEE「二」Spring中的Bean管理
2.1 BeanFactory接口
Spring 的核心功能就是实现对 Bean 的管理,比如 Bean 的注册、注入、依赖等。而Spring容器提供了依赖注入这个特征,以实现 Spring 容器对 Bean的管理,而且使用 IoC实现了对Bean的配置与实际应用代码的隔离。其中,Core Container模块的核心概念就是BeanFactory,它是所有Spring应用的核心。因为Spring的核心模型就是Bean模型,所以需要在管理Spring Bean的基础上保证Spring应用的运行。
BeanFactory接口是Bean容器设计中基本的职责定义接口,定义了按照名称、参数、类型等几个维度获取、判断Bean实例的职能。
HierarchicalBeanFactory只是对BeanFactory进行了扩展,定义了父容器(Parent BeanFactory)及判断当前Bean的名称是否在当前Bean工厂中等。
ConfigurableBeanFactory 提供了设置父容器接口、指定类加载器的职能,并且为当前容器工厂设计Bean的定制型的解析处理器、类型处理器等,主要目的是实现对 ...
JavaEE「一」Spring简介
1.0 前言
这系列文章是大三上学期JavaEE课程内容的一些笔记,主要学习的对象是JavaEE中常用的Spring框架以及Mybatis框架。
我认为,学习好Spring框架对于软件工程专业的学生是比较重要的,包括但不限于以下好处:
体会软件设计原则是如何实践的
感受各种设计模式在现代开发框架中的应用
AOP思想、IOC思想等等的实现方式
...
作为软件开发人员,通过学习Spring框架对自身的基本功的磨练是大有裨益的。
1.1 Spring是什么?
Spring是一款用于简化企业级Java应用开发的分层开源框架,它有着强大的扩展、融合能力,善于将各种单层框架完美地糅合在一起,并建立一个完整体系,统一、高效地构造可提供企业级服务的应用系统。
Spring是一个分层非常清晰并且依赖关系、职责定位非常明确的轻量级架构,主要分为8大模块:数据处理模块(Data Access/Integration)、Web模块、AOP(Aspect Oriented Programming)模块、Aspects模块、Instrumentation模块、Messaging模块、Core Contain ...
什么是 CI/CD?(持续集成/持续交付)
via: https://opensource.com/article/18/8/what-cicd
作者:Brent Laster 选题:lujun9972 译者:pityonline 校对:wxy
本文由 LCTT 原创编译,Linux中国 荣誉推出
在软件开发中经常会提到 持续集成(Continuous Integration)(CI)和 持续交付(Continuous Delivery)(CD)这几个术语。但它们真正的意思是什么呢?
在谈论软件开发时,经常会提到 持续集成(Continuous Integration)(CI)和 持续交付(Continuous Delivery)(CD)这几个术语。但它们真正的意思是什么呢?在本文中,我将解释这些和相关术语背后的含义和意义,例如 持续测试(Continuous Testing)和 持续部署(Continuous Deployment)。
概览
工厂里的装配线以快速、自动化、可重复的方式从原材料生产出消费品。同样,软件交付管道以快速、自动化和可重复的方式从源代码生成发布版本。如何完成这项工作的总体设计称为“持续交付”(CD) ...
二叉树的非递归遍历
二叉树的遍历是数据结构这门课中一个很基础的要求,通常我们会使用递归的方式来遍历二叉树,递归也比较利于理解。
而对于二叉树的非递归遍历,通常我们采用栈的方式实现。下面就分别说一下如何使用栈来实现二叉树的先序、中序、后序遍历。
首先给出二叉树的数据结构:
/** * @author thomas * @version 1.0 * @date 2019/12/20 23:30 * TODO **/public class TreeNode { private String value; private TreeNode leftChild; private TreeNode rightChild; public TreeNode() {} public TreeNode(String value) { this.value = value; } public String getValue() { return value; } public ...