当前位置: 首页 > news >正文

ssm复习

Spring Framework系统架构

核心容器的学习

IOC/DI

IOC容器

IOC

        使用对象时,由主动new产生的对象转换为由外部提供对象,此过程中对象的创建的控制权交由外部,此思想称为控制反转,   (实现了自己new的解耦)  对象创建的控制权

Spring提供一个容器,称为IOC容器 用来充当IOC思想的外部

Bean

IOC容器负责对象创建,初始化,等一系列的操作,被创建或被管理的对象在IOC容器中统称为Bean

DI

在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入

核心概念  :

充分解耦   使用IOC管理bean  使用DI依赖注入进行绑定

最终效果  :使用对象时不仅可以从IOC中直接获取,并且获取到的Bean已经绑定了所有的依赖关系

 IOC入门

管理什么---------------service与dao

如何将被管理的对象告知IOC容器  -------------配置

被管理的对象交由IOC容器,如何获取到IOC容器-----------接口

如何从容器中获取bean-----------接口方法

使用Spring获取到----------pom.xml

DI入门

 如何将Dao对象进入到Service中 (提供set方法)

Servic与Dao的关系如何描述  (配置)

bean配置

单例模式,(默认)  多例

为什么用单例?  scope  si    

不适合的给容器管理的bean封装实体的域对象

name可以配置多个名字

bean的实例化

实例化的三中的方式

1使用构造方法

调用的是无参的构造方法 构造方法的不管是公共的还是私有的都能调用,反射

技巧:   Spring的报错观察最下面

2-----静态工厂的实例化   

工厂的创建对象的方法是静态的  直接写到里面

配置上class = factory 然后后面添加工厂的方法的

为什么不直接new对象         原因可以在工厂中对 对象的功能的增强

3实例工厂初始化bean 

工厂的创建bean的方法是非静态的 所以先要创建工厂对象,然后通过工厂对象创建bean

  为什么创建一个无用的工厂bean累赘

改良---------  使用FactoryBean实例化         <实用>

Bean的声明周期

从创建到销毁的整个过程

初始化容器,

创建对象

执行构造方法

执行属性注入set操作

执行bean的初始化方法

使用bean

执行业务操作

关闭销毁容器

执行bean的销毁

依赖注入的方式-----DI

 注入的类型  ------------基本类型,引用类型

自动装配

       IOC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程叫做自动装配

自动装配的方式

1 按照类型

2 按照名称

3 构造方法注入

4 不启动自动装配

在service要想自动装配dao要使用setter方法,然以配置中使用bytype

按照类型匹配必须要求类型唯一

按照名称装配   id和set方法后面的一致   要求名称必须一致   变量名与配置耦合,不推荐

自动装配用于引用类型的操作,不用于简单类型的进行操作,

自动装配的优先级低于setter方法和构造方法注入,同时出现会失效

数据源对象管理   第三方bean的管理

对象交由我们管理,将对应的属性提供过去,(set方法注入)


容器

1 ,加载类路径下的配置文件 -------------获取容器

2, 获取bean  

BeanFactory接口最顶层的接口  最早期的容器接口

beanFactory的操作

两者的区别

beanfactory加载是延迟加载     application初始化的bean是立即加载的

注解

 bean的作用范围  bean生命周期

单例加@scope    prototype      Singleton

bean的声明周期

初始化方法:-----(在构造方法之后运行) 在方法上加@PostConstruct

bean销毁之前------@PreDestroy

bean销毁之前的操作记得  关闭容器和关闭钩子才能运行

 依赖注入----------自动装配       

引用类型

 @Autowired         

原理按照类型装配  

若是有多个相同类型的bean使用@Qualifier指定名称   (需要依赖@Aut  一起用)

 注意:自动装配基于反射设计创建对象并暴力反射对应的私有属性初始化的数据,因此无需提供setter方法

自动装配记得提供无参的构造方法,(不提供造不出对象)

简单类型

@Value

加载外部的prop文件  配置的文件加载到bean中使用

1 写配置文件

2 配置文件上加注解   propertySource(文件地址)  ----------不支持通配符*

3 使用

第三方bean的管理 

@Bean 添加这个表示方法的返回值是bean

 返回值就是所需要的bean

不建议直接 写入Springconfig中

新创建一个Config类然后导入SpringConfig配置中

 如果配置类中缺少东西  如简单类型   引用类型

简单类型

Springconfig 配置文件上写   propertySource加载这个简单类型的数据文件地址 然后在用的地方直接@value

引用类型

假定需要使用dao     给个类型,Spring直接给你

原理自动装配   在容器中给你找这个bean给你自动装配进去  (按照类型装配)

注解和xml配置比较

注意  :  bean定义完在再文件中,注解Component需要我们识别出来,扫描bean的包

Spring整合Mybatis

运行类

配置类

 核心对象SqlSessionFactory  

mybatis管理的就是sqsessionFactory对象

第三方bean的管理   

记得Springconfig 导入该配置

 创建sqlsessionFacoryBean

 AOP

面向切面编程

不惊动原始设计的基础上为其进行功能的增强

无侵入式/无入侵式    编程

红色的是业务代码

将蓝色的代码抽取出来,  

连接点 原始方法

切入点 实际追加功能的方法

通知  共性的功能

切面  通知这个共性的功能与切入点之间的关系     (在哪个切入点上执行那些通知)

连接点是所有方法,切入点是匹配某些方法,有了切入点有了通知将他们一绑定叫做切面

切面描述的就是共性功能与执行位置之间的关系

入门案例

 

 

 AOP的工作流程

        如果切入点和要造bean的那个类匹配上对应的方法,那么就造代理对象否则就是原始对象

        工作本质:代理模式

 Aop切入点表达式

描述切入点方法的表达式

execution执行到指定的切入点 

 


 通知类型

前置通知      @Before

        设置当前通知方法与切入点之间的绑定关系,当前通知方法在原始切入点方法前运行

后置通知        @After

        设置当前通知方法与切入点之间的绑定关系,当前通知方法在原始切入点方法后运行

环绕通知

        设置当前通知方法与切入点之间的绑定关系,当前通知方法在原始切入点方法前后运行

         通过proceedingjoinpoint来调用原始方法,如果没有调用原始方法,就会对原始方法进行一个隔离的操作   比如说权限验证的操作,如果 没有权限,就不会调用原始方法,

返回后通知  @AfterReturning

        设置当前通知方法与切入点之间的绑定关系,当前通知方法在原始切入点方法正常执行完毕后运行      (方法没有抛出异常才能通知)

抛出异常后通知   @AfterThrowing

注意,这个仅仅是方法出异常之后才能执行,不出异常不执行.

案例:测量业务层接口万次执行效率

 这样就可以得到每个方法的执行时间,进行改良

主要是通过proceedingjoinpoint获取到该方法的签名信息,然后获取到该方法的接口名,和方法名

就可以描述出来当前测得是谁

注意只是一个理论值

AOP通知获取数据

获取参数

获取返回值

获取异常信息

        分析:是不是所有的通知都能拿到这三个,但是返回值和异常信息不一定

获取参数   

        可以解决的问题,比如说前端传过来一个对象,但是我要的是字符串,那么aop获取到参数,检测到不是字符串,那么就传递一个默认的参数,这样就保证了程序的健壮性.

返回值的获取

             afertreturning  和 around

        案例百度网盘密码数据兼容处理

        通过proceedingjoinpoint的getAregs获取到业务层代码的参数,然后获取到,密码的String,然后通过trim去掉密码的空格,然后返回到给业务层,然后继续实现业务层代码.         

如果有许多大量的重复的功能在项目中加载,那么aop是不二选择,简化共性开发

 Aop的总结

    ​​​​​​

 

其中环绕通知可以模拟出其他所有的通知

只在调用方法前做事情-------前置通知

用trycatch在finally里面写的东西就是------后置通知

用trycach在try大括号结束之前原始方法调用之后的通知就是-------返回后通知

catch模拟--------抛出异常后通知

Spring的事务

  解释:可以在业务层开启的事务

事务作用:在数据层保障一系列的数据库操作同成功同失败

Spring事务的作用:   在业务层开启事务可以保证多个调用数据层的操作同成功或者失败

如何保证 :平台事务管理器接口   两个方法  回滚,提交

实现类使用jdbc的事务 

 

  案例转账:    转账整个事务中没有原子性,要么这个转账的事务全做要么全不做

         第一步在要加事物的接口上加上@Transaction  第二步设定平台事务管理器然后在配置中加上事务管理器,config中加上事务管理器的bean  创建事务的datasourceTransactionMananger事务管理器, 第三步  在Spring的配置文件中加上EnableTransactionManageMenagement告诉Spring你加上了Transaction这个事务管理器

当加上了事务的注解的业务层代码,出现了异常,要么都提交要么都不提交.

第一步

第二步 

第三部

 Spring事务角色

 

 将两个事务都加到Spring事务中

事务管理员    事务发起方,在Spring中通常指的是业务层开启事物的方法

事务协调员   加入事务方  在Spring中指的是数据层的方法,也可以是业务层方法

将多个事务打成一个事务

        mybatis中的sqlSessionFactory中的Datasource和我们的jdbc中的事务管理器中的sqlsessionFactory的datasource是同一个,所以Spring的事务管理才能生效进行统一进行管理

进行相同的数据源进行管理.

事务的相关配置(可以在注解上进行配置)

案例

 

日志事务和两个转账事务都继承一个事务,但是我们想要的是日志的事务不要加入这个事务的集中,自己开启一个全新事务 

事务的传播行为   事务协调员对事务管理员的所携带事务的处理态度    (右边对左边)

让事务的协调员有不同的事务特征

SpringMVC

简介;      是一种基于Java实现的mvc模型的轻量级的web框架

Springmvc进行表现层功能开发

 入门案例 

导入jar包

定义成bean 

 初始化配置类

 告诉tomcat容器加载配置

 流程分析

 

 

 Springboot

 

 

http://www.dtcms.com/a/318567.html

相关文章:

  • 【RabbitMQ】高级特性—死信队列详解
  • 560. 和为 K 的子数组 - 前缀和思想
  • MATLAB下载教程MATLAB R2025a 保姆级安装步骤(附安装包)
  • 数据结构——双向链表及makefile
  • c++ 中 原子锁、互斥锁、自旋锁的区别和详细用法
  • 大模型 + 垂直场景:搜索 / 推荐 / 营销 / 客服领域开发
  • 【Redis】Linux部署redis 7集群部署三主三从、ACL新建用户及密码(图文教程)
  • ​ubuntu22.04系统入门 (四)linux入门命令 权限管理、ACL权限、管道与重定向
  • 集合数据类型Map和Set
  • pcl手动直通滤波
  • LeetCode每日一题,8-6
  • 基于Simulink/MWORKS的文字与开关量混合传输系统设计
  • 流式输出 vs 非流式输出
  • SpringBoot设置跨域的几种方式
  • 互斥锁与条件变量
  • 每日五个pyecharts可视化图表-bars(5)
  • Java语言基础深度面试题
  • List、ArrayList 与顺序表
  • 智能学号抽取系统 V5.7.4 更新报告:修复关键同步漏洞,体验更臻完美
  • Spring Boot 项目代码笔记
  • 三、Istio流量治理(二)
  • 文件权限合规扫描针对香港服务器安全基线的实施流程
  • 《零基础入门AI:深度学习入门(从PyTorch安装到自动微分)》
  • Anthropic于本周一推出了其旗舰模型的升级版Claude Opus 4.1
  • 《第十三篇》深入解析 `kb_api.py`:知识库的创建、删除与查询接口
  • 基于Vue 3 的智能支付二维码弹窗组件设计与实现
  • Effective C++ 条款26: 尽可能延后变量定义式的出现时间
  • 007 前端( JavaScript HTML DOM+Echarts)
  • 【保留小数精度不舍入】2022-10-8
  • MaxKB 使用 MCP 连接 Oracle (免安装 cx_Oracle 和 Oracle Instant Client)