Spring Bean的作用域,Spring AOP周边,Mybatis的工作流程!

本文介绍了Spring Bean的五种作用域,包括singleton、prototype、request、session和global-session。接着,阐述了Spring AOP中的关注点与横切关注点的区别,并分析了AOP的相关术语。此外,详细讲解了Mybatis的基本工作流程,从读取配置文件到执行SQL语句,再到结果映射和返回Java对象的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Spring Bean的作用域之间有什么区别?

Spring容器中的bean可以分为5个范围。所有范围的名称都是自说明的,但是为了避免混淆,还是让我们来解释一下:
singleton:这种bean范围是默认的,这种范围确保不管接受到多少个请求,每个容器中只有一个bean的实例,单例的模式由bean factory自身来维护。
prototype:原形范围与单例范围相反,为每一个bean请求提供一个实例。
request:在请求bean范围内会每一个来自客户端的网络请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收。
Session:与请求范围类似,确保每个session中有一个bean的实例,在session过期后,bean会随之失效。
global-session:global-session和Portlet应用相关。当你的应用部署在Portlet容器中工作时,它包含很多portlet。如果你想要声明让所有的portlet共用全局的存储变量的话,那么这全局变量需要存储在global-session中。
全局作用域与Servlet中的session作用域效果相同。
简写:
singleton全局只有一个实例
Prototype每次调用产生一个新的实例
Request每次请求产生一个bean
Session每个session可以产生新的bean,多个用户的bean互不干扰
globalSession作用和session类似,只是使用portlet的时候使用

2. 在Spring AOP 中,关注点和横切关注的区别是什么?

关注点是应用中一个模块的行为,一个关注点可能会被定义成一个我们想实现的一个功能。
横切关注点是一个关注点,此关注点是整个应用都会使用的功能,并影响整个应用,比如日志,安全和数据传输,几乎应用的每个模块都需要的功能。因此这些都属于横切关注点。
简写:
关注点是应用中一个模块的行为,可能会被定义成我们想实现的一个功能。
横切关注点是一个关注点,是整个应用都会使用的功能,并影响整个应用,比如日志,数据传输,几乎应用的每个模块都需要的功能。这些都属于横切关注点。
类似于班级里面 我是关注点, 老师是横切关注,我操作我的电脑,老师带着我们操作所有电脑,老师是影响整个班级也就是应用!

3.AOP 相关术语分析

  1. 切面(aspect): 横切面对象,一般为一个具体类对象(可以借助@Aspect声明)。
  2. 通知(Advice):在切面的某个特定连接点上执行的动作(扩展功能),例如around,before,after等。
  3. 切入点(pointcut):对连接点拦截内容的一种定义,一般可以理解为多个连接点的结合。
  4. 连接点(joinpoint):程序执行过程中某个特定的点,一般指被拦截到的的方法。

@Aspect 注解用于标识或者描述AOP中的切面类型,基于切面类型构建的对象用于为目标对象进行功能扩展或控制目标对象的执行。
@Pointcut注解用于描述切面中的方法,并定义切面中的切入点(基于特定表达式的方式进行描述),在本案例中切入点表达式用的是bean表达式,这个表达式以bean开头,bean括号中的内容为一个spring管理的某个bean对象的名字。
@Around注解用于描述切面中方法,这样的方法会被认为是一个环绕通知(核心业务方法执行之前和之后要执行的一个动作),@Aournd注解内部value属性的值为一个切入点表达式或者是切入点表达式的一个引用(这个引用为一个@PointCut注解描述的方法的方法名)。

五种通知方式:
前置通知 (@Before) 。
返回通知 (@AfterReturning) 。
异常通知 (@AfterThrowing) 。
后置通知 (@After)。
环绕通知 (@Around) :重点掌握(优先级最高)
在这里插入图片描述

4. mybatis的基本工作流程

1.读取配置文件,配置文件包含数据库连接信息和Mapper映射文件或者Mapper包路径。
2.有了这些信息就能创建SqlSessionFactory,SqlSessionFactory的生命周期是程序级,程序运行的时候建立起来,程序结束的时候消亡
3.SqlSessionFactory建立SqlSession,目的执行sql语句,SqlSession是过程级,一个方法中建立,方法结束应该关闭
4.当用户使用mapper.xml文件中配置的的方法时,mybatis首先会解析sql动态标签为对应数据库sql语句的形式,并将其封装进MapperStatement对象,然后通过executor将sql注入数据库执行,并返回结果。
5.将返回的结果通过映射,包装成java对象。
简写:
1)先创建SqlSessionFactory然后再创建SqlSessionFactory读取配置文件再依据配置文件中的配置找映射文件(mapper.xml);
2)读取映射文件中的SQL语句创建PreparedStatementSQL语句
3)SqlSessionFactory再调用openSession()返回一个SqlSession对象,该对像封装了执行预编译SQL语句的相关方法.
4)SqlSession调用具体执行方法,传入sql id和参数.依据sql id去Map中找对应sql id的value(预编译SQL),将参数传入预编译的SQL中并调用PreparedStatement对象的excuteUpdate()方法执行该SQL语句.
5)如果是插入,则会返回int类型的行数,如果是查询,返回list entity map!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值