02-Java后端框架-SSM简单总结
目录
一、Spring Bean的生命周期
二、SpringMVC的执行流程
三、MyBatis
3.1一级缓存,二级缓存
3.2.MyBatis执行流程
3.3 MyBatis的使用
一、Spring Bean的生命周期
1.Spring Bean的创建生命周期:
bean:被spring管理的对象是bean,bean工厂获得的对象就是bean,
对象:自己手动创建的对象,不是被spring所管理的,是对象但是不是bean
spring容器创建bean的过程:
UserService 类
-------》无参构造方法(实例化)推断构造方法
-------》对象
-------》依赖注入(加了@Autowired注解的赋值)
-------》a()初始化前(@PostConstruct)
-------》初始化(InitializingBean)
-------》初始化后(AOP)
-------》代理对象
-------》bean
UserService 类对象的创建过程:
扫描包,类上面有@Compoent ,@Service,@Controller的注解的调用无参构造方法创建对象
初始化前(@PostConstruct):
想要spring创建UserService的时候就初始化 默认defaltUser,初始化用户的权限信息(去数据库查询到权限信息,然后封装成User对象,赋值给UserService的deafultUser属性),可以使用注解@PostConstruct
如果自己写一个类似@PostConstruct注解的方法如何写?
初始化(InitializingBean):
判断一个类是否实现了InitializingBean接口,instanceof InitialzingBean,如果实现了该接口,就强转类型,再调用它的方法:((InitialzingBean)对象).afterPropertiesSet()
有默认的无参构造方法 + 有参构造方法:都可以使用
只有一个有参构造方法:可以使用
有多个构造方法,但是没有无参构造方法:这个时候会报错,提示找不到默认的无参构造方法,因为spring无法识别到需要用哪一个有参构造方法,如果想要使用其中的一个构造方法需要加上@Autowired注解(这样程序员就告诉了spring需要用哪一个有参构造方法,spring知道使用具体的某个构造方法值就不会报错了)
推断构造方法:
单例Bean 不等同于单例模式:
spring容器里面,不同的bean的name是唯一的
获取到name为orderService的bean都是同一个bean对象,这就是单例Bean
如果orderService不是单例Bean(假设是原型bean,独立bean),通过orderService从spring容器里面获取到的对象就不会是同一个对象,
spring底层如何实现单例bean的设计?
spring底层是使用map存储bean对象的,这样beanNam就是唯一的,同一个beanName获取到的bean对象都是同一个。Map ====等价于==== spring 容器
通过类型去容器里面寻找对象,类型找到3个对象 Map<OrderService, bean对象> orderService Map<OrderService, bean对象> orderService1 Map<OrderService, bean对象> orderService2 先根据类型找对象,找到3个,再根据name去找bean,可能一个都没有, 或者找到一个唯一的bean
当有3个bean对象的时候,(找name为orderService111的bean)找不到的时候spring会提示报错,提示找不到该bean
当只有1个bean对象的时候,(需要找找类型OrderService,name为orderService1 和 orderService2 的bean对象)这个时候不会报错,因为容器里面OrderService类型的bean对象只有一个,找到之后就直接返回,不再根据name去寻找
依赖注入(加了@Autowired注解的赋值):
过程和推断构造方法过程类似:
先去map里面通过类型找到bean,如果是单个就返回
如果通过类型找到的bean是多个,再通过name去寻找bean
初始化后(AOP)
cglib动态代理:如果没有实现接口,就使用的是cglib动态代理
jdk动态代理:如果实现了接口spring使用的就是jdk动态代理
到此步骤(初始化后(AOP))的时候 spring会判断对象是否需要aop
1.判断对象要不要进行AOP?
2.
事务:
未加@Configuration注解的时候,使用事务,是不会回滚的
加上了@Configuration注解的时候,使用事务,抛异常的时候就会回滚
事务失效
如何避免事务失效
1.UserService自己注入自己(注入的就是userService的代理对象),然后再调用a()方法
2.将方法写到另外的A类中,注入A类(注入的是A类的代理对象),用注入A类的对象(代理对象)调用a()方法就可以有效了
二、SpringMVC的执行流程
1.客户端发送请求到前端控制器DispatcherServlet
2.前端控制器根据请求路径进入相应的处理器
3.处理器调用相应的业务方法
4.处理器获取到相应的业务数据
5.处理器将组装好的数据交还给前端控制器
6.前端控制器将获取到的ModelAndView对象传给视图解析器ViewResolver
7.前端控制器获取到解析好的页面数据
8.前端控制器将解析好的页面返回给客户端
三、MyBatis
3.1一级缓存,二级缓存
一、mybatis缓存基本介绍
1、缓存:将相同查询条件的sql语句执行一遍后得到的结果存在内存或者某种缓存介质中,当下次遇到一模一样的查询sql时候不在执行sql与数据库交互,而是直接从缓存中获取结果,减少服务器的压力;
2、mybatis的查询缓存又分为一级缓存和二级缓存,
一级缓存的作用范围为同一个sqlsession,一级缓存是默认开启的
而二级缓存的作用范围为同一个namespace和mapper,二级缓存是默认不开启的
如何开启二级缓存:
1,打开总开关
在mybatis-config.xml文件中的标签配置开启缓存:
<settings> <!--开启二级缓存--> <setting name="cacheEnabled" value="true"/>
</settings>
2,在需要开启二级缓存的mapper.xml中加入caceh标签
<cache>
<cache/>
3,让使用二级缓存的POJO类实现Serializable接口
3.2.MyBatis执行流程
1.首先加载Mapper配置文件的SQL映射文件,或者是注解相关的SQL内容
2.创建会话工厂,MyBatis通过读取配置文件信息来构造会话工厂SqlSessionFactory
3.创建会话,根据会话工厂,MyBatis就可以通过它来创建会话对象SqlSession,会话对象是一个接口,该接口中包含了对数据库的增删改查方法
4.创建执行器,因为会话对象不能直接操作数据库,所以它使用了一个叫做数据库执行器Executor的接口来帮它操作
5.封装SQL对象,在这一步,执行器将待处理的SQL信息封装到一个对象中MapperStatement,该对象包括SQL语句,输入参数映射信息和输出结果映射信息
6.操作数据库,拥有执行器和SQL信息封装对象就使用它们访问数据库了,最后返回操作结果,结束流程
3.3 MyBatis的使用
3.3.“#”和"$"的区别
1.“#”是预编译处理,
2.“$”是字符替换。
在使用“#”时,MyBatis会将SQL中的参数替换为“?”,配合preparedStatement的set方法赋值,这样可以有效防止SQL注入,保证程序运行的安全性
02-Java后端框架-SSM简单总结相关推荐
- java后端框架选型_后端语言选型浅谈
前不久回答了一个关于后端语言选型的问题,写的回答也让笔者有了很多感触,因此在这里谈论下自己对后端语言选型的心得体会,姑且算是抛砖引玉,希望大家能分享各自的心得. 后端语言发展历史 Web 后端语言的兴 ...
- layui后端框架的简单使用
layui后端框架的基本使用 <!DOCTYPE html> <html> <head><meta charset="utf-8"> ...
- 【10.24】Java后端开发SSM框架实践
瑞吉外卖问题记录 使用MyBatisPlus框架实现公共表字段的自动填充功能 创建一个集成MateObjectHandler接口的类,在其中对公共字段进行赋值 使用ThreadLocal属性来保存和获 ...
- go语言后端框架之简单探索
文章目录 前置教程 数据库对象关系映射--gorm 1. 安装必要库 2. 定义orm对象,生成数据表结构 路由定义及处理 1. 集中管理路由 2. 编写路由绑定的处理函数 3. 删 操作 4. 查 ...
- 最牛啤的Java后端框架,没有之一!
"2021 你退税了吗?"最近这个app服务器都被挤爆了!3月1号起 一年一度的个人所得税退税补税又开始了!由于参与的人太多,个税App几度崩溃,场面极其混乱. 如果面试中问你 ...
- Java后端以及web前端及echarts框架词云分析
运用Java后端以及web前端及echarts框架词云分析做出数据分析统计可视化展示. 以下为我的项目展示截图: 开发环境: 集成开发环境(IDE):IntelliJ IDEA 2021 服务器:To ...
- java计算机毕业设计ssm“阳光”养老院管理系统
项目介绍 随着生活水平的提高,我国逐渐呈现出老龄化发展趋势,随着老年人的增加,各种社会养老矛盾逐渐显现,比如空巢老人多.医疗服务差.人文关怀少.由此,建设"阳光"养老院管理系统, ...
- java计算机毕业设计ssm同城绘本馆系统-绘本图书商城
项目介绍 本课题设计的目标是实现一个基于web的同城绘本馆.论文使用软件开发的顺序对同城绘本馆进行详细的阐述.首先介绍了系统开发的背景,以及系统开发的意义和系统开发的方案.接着介绍了系统开发使用的编 ...
- java计算机毕业设计ssm同城绘本馆系统-绘本图书商城(源码+系统+mysql数据库+Lw文档)
项目介绍 本课题设计的目标是实现一个基于web的同城绘本馆.论文使用软件开发的顺序对同城绘本馆进行详细的阐述.首先介绍了系统开发的背景,以及系统开发的意义和系统开发的方案.接着介绍了系统开发使用的编程 ...
最新文章
- IT职场人生系列之二十二:如何学习新语言(二)
- 成为更优秀的开发人员:第一步-“制造”粉丝
- C语言回调函数demo(帮助理解)以海康isapiExternDemo回调函数为例
- 现在的男生真的太惨了
- CentOS下yum操作gnome和kde桌面
- XBMC源代码分析 4:视频播放器(dvdplayer)-解码器(以ffmpeg为例)
- js删除字符串的最后一个字符几种方法
- 大龄屌丝自学笔记--Java零基础到菜鸟--006
- 农田生产潜力数据集、耕地分布矢量数据、土地利用数据、作物分布数据、林地分布数据、绿地分布
- oracle防止绿盟扫描,Oracle认证:Oracle避免全表扫描方式
- css动画无限循环转圈,css实现无限循环
- 【peoplesoft】Integration Gateway - General Error (158,10201)错误
- movieclip颜色
- 人货匹配模型没搞懂?互联网行业都在讨论它
- VS 点击页面自动定位到解决方案资源管理器目录位置
- DHCP和域的概念知识
- python找零_【python算法书】硬币找零问题?
- java高级架构师年薪,深度集成!
- 学人工智能好就业吗?AI职业前景分析
- 失业参加聚会_谁被邀请参加聚会?
热门文章
- 高中计算机奥赛 加分,自主招生 | 五大学科竞赛含金量大盘点,高一、高二如何参赛?...
- 计算机测色配色应用,实用技术∣如何有效利用电脑测色配色
- 投资大,智慧工厂是鸡肋?重庆为啥还要求规上企业向其靠拢?
- 【OpenCV教程】一文带你入门和精通OpenCV(C/C++)
- WM5,WM6注册表优化全集
- ai计算机当前不支持的字体,字体arial不支持样式regular的解决方法
- 机器学习:PM2.5预测问题 (基于Sklearn Pandas)
- matlab混淆矩阵图
- 学习LabVIEW应看的几本书
- TuneUp Utility 2012