热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SSMspring业务层框架

Spring框架Spring是分层的JavaSEEE应用full-stack轻量级开源框架,以IoC(InverseOfControl:反转控制)和AOP(Aspect

Spring 框架








Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架,

以 IoC(Inverse Of Control:反转控制)和 AOP(Aspect Oriented





Programming:面向切面编程)为内核,提供了展现层 SpringMVC 和持久层 Spring JDBC 以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的Java EE 企业应用开源框架。


Spring 框架的优势








1方便解耦 简化开发

通过 Spring 提供的 IoC 容器,可以将对象间的依赖关系交由 Spring 进行控制,避免硬编码所造成的过度程序耦合。

用户也不必再为单例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。

2 AOP编程的支持

通过 Spring 的 AOP 功能,方便进行面向切面的编程,许多不容易用传统 OOP 实现的功能可以通过 AOP 轻松应付。

3声明式事务的支持

可以将我们从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活的进行事务的管理,提高开发效率和质量。

4方便程序的测试  

可以用非容器依赖的编程方式进行几乎所有的测试工作,测试不再是昂贵的操作,而是随手可做的事情。

5方便集成各种优秀框架

Spring 可以降低各种框架的使用难度,提供了对各种优秀框架(Struts、Hibernate、Hessian、 Quartz等)的直接支持。

6降低 JavaEE API 的使用难度

Spring 对 JavaEE API(如 JDBC、 JavaMail、远程调用等)进行了薄薄的封装层,使这些 API 的使用难度大为降低。

7 Spring的源码是经典学习范例

Spring 的源代码设计精妙、结构清晰、匠心独用,处处体现着大师对 Java 设计模式灵活运用以及对 Java 技术的高深造诣。

它的源代码无意是 Java 技术的最佳实践的范例。


程序的耦合








耦合是指程序间的依赖关系,包括:类之间的依赖和方法间的依赖。在实际开发中:我们应该做到:编译期不依赖,运行时才依赖。

***程序讲究的是低耦合,高内聚。就是同一个模块内的各个元素之间要高度紧密,但是各个模块之间的相互依存度却要不那么紧密。

解耦的方法











为什么要解耦?就是为了提高我们程序的灵活性和可扩展性。

解耦的思路:

1. 使用反射来创建对象,而避免使用new关键字。

2. 通过读取配置文件来获取要创建的对象全限定类名。

工厂模式结合配置文件解耦

在实际开发中我们可以把三层的对象都使用配置文件配置起来,当启动服务器应用加载的时候, 让一个类中的方法通过读取配置文件,把这些对象创建出来并存起来。在接下来的使用的时候,直接拿过来用就好了。那么,这个读取配置文件, 创建和获取三层对象的类就是工厂。

Spring三大经典思想








1. IOC

概念:Inversion Of Control 翻译成 “控制反转”

本质:对象交给Spring来管,而不是自己new

作用:削减计算机程序的耦合(解除代码中的依赖关系)

原理:工厂模式+反射+xml配置文件

2. DI

概念:Dependency Injection。 翻译成 “依赖注入”,它是 spring 框架核心 IOC 的具体实现
本质:给某个对象设置值

作用:对应之间有依赖关系,再也不需要我们手动去设置值了,Spring 框架会帮我们解决

原理:反射设置值

3. AOP

概念:全称是 Aspect Oriented Programming 即: 面向切面编程

就是把我们程序重复的代码抽取出来,在需要执行的时候,使用动态代理的技术,在不修改源码的基础上,对我们的已有方法进行增强

作用:在程序运行期间,不修改源码对已有方法进行增强

优势:减少重复代码; 提高开发效率; 维护方便

实现方式:使用动态代理技术,在 Spring 中,框架会根据目标类是否实现了接口来决定采用哪种动态代理的方式

-------AOP核心概念-------

目标类(target): 要被增强的类

代理类(proxy): 使用动态代理产生目标类的代理

切入点(pointcut): 目标类中需要增强的方法,这些方法都称为切入点  

通知(advice): 增强类中定义的方法,这些方法用于增强目标方法

切面(aspect): 切入点+通知

连接点(joinpoint): 目标类中的所有方法    连接点包含切入点

织入(weaving): 将通知方法加到目标方法中的过程  spring aop 整个过程就是织入

引入(introduction): 在目标类引入新的属性或者新的方法


依赖注入








依赖注入:Dependency Injection。它是 spring 框架核心 ioc 的具体实现。本质,就是设置值.
我们的程序在编写时,通过控制反转,把对象的创建交给了 spring,但是代码中不可能出现没有依赖的情况。
ioc 解耦只是降低他们的依赖关系,但不会消除。例如:我们的业务层仍会调用持久层的方法。
那这种业务层和持久层的依赖关系,在使用 spring 之后,就让 spring 来维护了。
简单的说,就是坐等框架把持久层对象传入业务层,而不用我们自己去获取。

BeanFactory 和 ApplicationContext 的区别








在 BeanFactory 这棵继承树上的都叫 Bean 工厂,也叫 Spring 容器。

BeanFactory 才是 Spring 容器中的顶层接口。ApplicationContext 是它的子接口。
区别:
创建对象的时间点不一样。
ApplicationContext推荐使用,只要一读取配置文件,默认情况下就会创建对象。

它在构建核心容器时,创建对象采取的策略是采用立即加载的方式。也就是说,只要一读取完配置文件马上就创建配置文件中配置的对象。
BeanFactory:什么时候使用什么时候创建对象。
它在构建核心容器时,创建对象采取的策略是采用延迟加载的方式。也就是说,什么时候根据id获取对象了,什么时候才真正的创建对象。


bean 的作用范围和生命周期








单例对象: scope="singleton"  Spring 默认为单例
一个应用只有一个对象的实例。它的作用范围就是整个引用。
生命周期:
对象出生:当应用加载,创建容器时,对象就被创建了。
对象活着:只要容器在,对象一直活着。
对象死亡:当应用卸载,销毁容器时,对象就被销毁了。
多例对象: scope="prototype"
每次访问对象时,都会重新创建对象实例。
生命周期:
对象出生:当使用对象时,创建新的对象实例。
对象活着:只要对象在使用中,就一直活着。
对象死亡:当对象长时间不用时,被 java 的垃圾回收器回收了。

实例化 Bean 的三种方式








1. 使用默认无参构造函数


2. Spring 管理静态工厂- 使用静态工厂的方法创建对象

public class StaticFactory {

         public static IAccountService createAccountService(){

                  return new AccountServiceImpl();
         }
}

3. spring 管理实例工厂- 使用实例工厂的方法创建对象

public class InstanceFactory {

         public IAccountService createAccountService(){

                  return new AccountServiceImpl();
         }
}



通知








前置通知 before   目标方法被调用之前,就执行该前置通知方法

后置通知 after-returning  目标方法 return 返回之后,就执行该返回通知方法

最终通知 after    目标方法被调用完之后,不关心返回结果,就执行该最终通知方法

环绕通知 around   包裹了目标方法,在目标方法之前和在目标方法之后整个过程,经常使用ProceedJoinPoint.proceed()来执行

异常通知 after-throwing  当目标方法在执行异常的时候,就会执行该异常通知方法


事务








Automicity 原子性: 即事务要么被全部执行,要么被全部不执行。如果事务下的子事务全部提交成功,则所有数据库操作被提交,否则,应进行事务回滚。

Consistency 一致性: 即状态转换必须是由一种正确的状态转换到另外一种正确的状态。

Isolation 隔离性: 即相互间必须不能被影响。

Durabillity 持久性: 即事务提交后将被永久保存,即便出现其他故障,事务处理结果也应得到保存。


事务的隔离级别








Read uncommitted: 读未提交,就是一个事务可以读取另一个未提交事务的数据。   --- 脏读

Read committed: 读已提交,顾名思义,就是一个事务要等另一个事务提交后才能读取数据。   --- 不可重复读

Repeatable read: 重复读,就是在开始读取数据(事务开启)时,不再允许修改操作。    --- 幻读

Serializable: 最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用。


事务的传播行为








REQUIRED: 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。一般的选择(默认值)   增删改
SUPPORTS: 支持当前事务,如果当前没有事务,就以非事务方式执行(没有事务)   查找
MANDATORY: 使用当前的事务,如果当前没有事务,就抛出异常
REQUERS_NEW: 新建事务,如果当前在事务中,把当前事务挂起。
NOT_SUPPORTED: 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起
NEVER: 以非事务方式运行,如果当前存在事务,抛出异常
NESTED: 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行 REQUIRED 类似的操作。

传播行为:业务层的方法处理事务的问题




推荐阅读
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • SpringMVC工作流程概述
    SpringMVC工作流程概述 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • MVC设计模式的介绍和演化过程
    本文介绍了MVC设计模式的基本概念和原理,以及在实际项目中的演化过程。通过分离视图、模型和控制器,实现了代码的解耦和重用,提高了项目的可维护性和可扩展性。详细讲解了分离视图、分离模型和分离控制器的具体步骤和规则,以及它们在项目中的应用。同时,还介绍了基础模型的封装和控制器的命名规则。该文章适合对MVC设计模式感兴趣的读者阅读和学习。 ... [详细]
  • Linux下部署Symfoy2对app/cache和app/logs目录的权限设置,symfoy2logs
    php教程|php手册xml文件php教程-php手册Linux下部署Symfoy2对appcache和applogs目录的权限设置,symfoy2logs黑色记事本源码,vsco ... [详细]
  • 第七课主要内容:多进程多线程FIFO,LIFO,优先队列线程局部变量进程与线程的选择线程池异步IO概念及twisted案例股票数据抓取 ... [详细]
author-avatar
ouyan1985_998
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有