13-Spring-SSM_SpringFramework加强

SpringFramework加强

SpringIOC模块

SpringMVC模块

SpringAOP模块


SpringIOC模块

IOC是一种设计思想,称之为控制反转。基于这种思想实现对象创建,对象的科学管理以及应用时的解耦(借助DI机制实现)。Spring框架核心就是基于这种机制进行了完美实现。

思考:控制反转探讨的是什么?答:谁控制谁的问题,Spring控制对象的创建管理。

思考:生活中的IOC的实现?答:例如股票操盘手,父母包办婚姻。

Spring三大设计思想:IOC/MVC/AOP


SpringBean容器的初始化

思考:如何理解Spring中的Bean对象?答:由Spring管理的对象都是Bean对象。

思考:如何理解Spring中的Bean容器?答:存储Bean对象的容器,可以是Map对象。

思考:我们自己写的类如何交给Spring管理?

答1:通过xml配置文件进行描述,例如<bean id="" class="">

答2:通过annotation方式进行描述,例如@Controller/@Service

思考:Spring中Bean对象的类型?

答1:未实现FactoryBean接口的对象

答2:实现了FactoryBean接口的对象

思考:Spring中如何创建Bean对象?答:借助BeanFactory工厂,基于反射技术创建Bean对象。

思考:Spring管理的Bean对象常用作用域?

答1:Singleton(单例作用域),Bean对象具备全局唯一性。

答2:Prototype(多例作用域),每次获取Bean对象都会创建一个新的实例。

思考:Spring管理的Bean对象是否支持延迟加载?答:支持。

思考:如何自己设计一个IOC容器呢?答:详情请查阅代码。


Spring中Bean容器初始化过程图

IOC_Bean容器(配置文件/工厂/容器/全局访问点)


Spring中的两大Map对象容器

思考:如何理解Spring中的两大Map对象?

答1:一个Map用于存储Bean的配置信息。

答2:一个Map用于存储Bean的实例信息。


Spring中两大类型Bean对象

未实现FactoryBean接口:直接通过反射技术调用构造器创建Bean对象。

实现了FactoryBean接口:调用FactoryBean对象的getObject方法,创建Bean对象。

说明:一般在创建一些相对复杂的工厂对象时,通常会写一个工厂Bean对象,然后基于工厂Bean对象创建具体的工厂对象,例如:SqlSessionFactoryBean/ShiroFilterFactoryBean/ProxyFactoryBean等。


Spring中的两大Bean对象描述方式

xml配置文件方式:<bean id="" class=""></bean>

annotation方式:@Service/@Controller/@Configuration/@Bean...


Spring中Bean对象的依赖注入

DI依赖注入基本概念图

DI依赖注入在项目中的应用实现图


Spring整合MyBatis

Spring整合MyBatis方式1图

Spring整合MyBatis方式2图


SpringMVC模块加强

MVC是一种分层架构设计思想,目的是基于对象职责上的不同,进行分层设计,实现各司其职,各尽所能,以提高代码的可维护性/可扩展性。

SpringMVC中的MVC模块是基于MVC分层软件设计思想的一种完美实现,类似的框架还有Struts2等。

注意:B/S网络系统架构下的单体式JavaEE软件一般采用MVC水平切分

SpringMVC核心架构

SpringMVC模块核心组件对象图


SpringMVC请求响应处理

所有MVC框架的重点都在请求和响应数据的处理上

MVC请求处理

  1. 请求路径:普通方式/rest风格方式,报错404

  2. 请求方式:Get请求/Post请求,报错405

  3. 请求参数:直接量/PO对象/MAP对象,报错400

MVC响应处理

  1. 响应方式:转发/重定向(redirect)

  2. 响应数据封装:ModelAndView,Model,Map

  3. 响应数据转换:将对象序列化为JSON格式字符串

注意:如果将响应数据转换为JSON格式字符串,将不调用ViewResover视图解析器对象


SpringMVC拦截器对象

拦截器是项目中的一种通用组件,通常可以在某个对象执行之前或之后做一些预处理操作,可以将其看成是一种特殊的过滤器。

SpringMVC拦截器对象图

需求:通过拦截器限定系统的登录时间

说明:在项目中自己编写SpringMVC拦截器

编写类实现HandlerInterceptor接口或者继承HandlerInterceptorAdapter类;

配置拦截器<mvc:interceptors/>,拦截器的执行顺序与配置顺序相关。


SpringMVC异常处理

项目中异常的处理方式及规则

  1. 异常捕获:try{}catch{},日志输出

  2. 继续抛出:数据层抛给业务层,业务层再继续抛给控制层,但是异常传递要占用资源,对性能会有一定影响,所以异常能处理则处理,处理不了则继续抛出。

SpringMVC异常处理图

SpringMVC中对异常处理的手段有两种:

  1. 直接在控制层方法中处理异常:处理异常的方法使用@ExceptionHandler修饰,并指定具体可以处理的异常类型。

  2. 定义全局异常处理类,在此类中对异常信息进行封装和转换。

说明:当Controller类中定义了局部异常处理方法,在全局异常处理类中也定义了同样的异常处理方法,那就遵循局部优先规则。


SpringAOP模块

AOP是一种面向切面的程序设计思想,基于这种思想可以动态为对象添加扩展功能设置控制对象的执行,Spring框架中对这种思想做了一个完美的实现。

SpringAOP动机

Spring框架中可以基于AOP实现对目标对象的控制以及功能的扩展:

SpringAOP对象调用图

例如:SpringAOP在项目中要实现的功能


SpringAOP原理实现

SpringAOP原理分析

  • 目标对象实现了接口则采用JDK动态代理控制目标对象

  • 目标对象未实现接口则采用Cglib代理控制目标对象

SpringAOP案例分析

项目中的日志管理:基于JDK动态代理实现目标对象控制及功能扩展

SpringAOP日志切面原理图

SpringAOP其他案例实现

SpringAOP底层代理对象创建及应用分析

JDK动态代理原理图

Cglib代理原理图


SpringAOP相关术语

切面(Aspect):封装了扩展功能的对象。

通知(Advice):封装了扩展功能及目标方法调用的一个切面方法。

包括:@Around,@Before,@After,@AfterReturning,@AfterThrowing

连接点:JointPoint,ProceedingJoinPoint(泛指一个目标方法)。

切入点:Pointcut(泛指多个目标方法的集合)。

说明:了解常用的切入点表达式

  1. bean(*ServiceImpl)

  2. @annotation(com.db.common.annotation.RequiredLog)

  3. ...

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。在编写C程序时,需要注意变量的声明和定义、指针的使用、内存的分配与释放等问题。C语言中常用的数据结构包括: 1. 数组:一种存储同类型数据的结构,可以进行索引访问和修改。 2. 链表:一种存储不同类型数据的结构,每个节点包含数据和指向下一个节点的指针。 3. 栈:一种后进先出(LIFO)的数据结构,可以通过压入(push)和弹出(pop)操作进行数据的存储和取出。 4. 队列:一种先进先出(FIFO)的数据结构,可以通过入队(enqueue)和出队(dequeue)操作进行数据的存储和取出。 5. 树:一种存储具有父子关系的数据结构,可以通过中序遍历、前序遍历和后序遍历等方式进行数据的访问和修改。 6. 图:一种存储具有节点和边关系的数据结构,可以通过广度优先搜索、深度优先搜索等方式进行数据的访问和修改。 这些数据结构在C语言中都有相应的实现方式,可以应用于各种不同的场景。C语言中的各种数据结构都有其优缺点,下面列举一些常见的数据结构的优缺点: 数组: 优点:访问和修改元素的速度非常快,适用于需要频繁读取和修改数据的场合。 缺点:数组的长度是固定的,不适合存储大小不固定的动态数据,另外数组在内存中是连续分配的,当数组较大时可能会导致内存碎片化。 链表: 优点:可以方便地插入和删除元素,适用于需要频繁插入和删除数据的场合。 缺点:访问和修改元素的速度相对较慢,因为需要遍历链表找到指定的节点。 栈: 优点:后进先出(LIFO)的特性使得栈在处理递归和括号匹配等问题时非常方便。 缺点:栈的空间有限,当数据量较大时可能会导致栈溢出。 队列: 优点:先进先出(FIFO)的特性使得

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

从码农到码到成功

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值