当前位置: 首页 > 网络应用技术

Mybatis源代码分析06:与Spring集成

时间:2023-03-07 01:05:48 网络应用技术

  注意:此系列源代码分析基于mybatis-spring 2.0.6,相应的Mybatis版本为3.5.6。

  关于它,大多数情况下,我们与容器结合在一起,本文分析了该过程的集成过程和集成过程。

  1.1集成项目和源代码和集成项目的项目称为github上的源代码监护权。当然,我还将其拉到了自己的Gitee创作中,地址是:Funcy/Mybatis。关于源代码和操作,本文的重点并不多。这是正确的。

  前面分析的版本是我们在这里分析的版本是它引用的Mybatis版本正是。

  1.2演示已准备好获取源代码,然后您可以创建示例演示。我们被创造了。整个目录如下:

  代码目录:

  mapper.xml文件:

  在春季管理的情况下,它被春季注入。

  ;

  字符串密码=“ 123”;返回新的SimpleDriverDataSource(驱动程序,URL,用户名,密码);}}}

  运行,结果如下:

  可以看出,Mybatis和Spring的整合成功,我们将根据该演示分析该项目。

  让我们看一下简介:

  在此方法中,首先创建,然后配置数据源和文件路径,然后获得调用方法。看来这很关键。让我们看一下其定义:

  可以看出,它是实现的,并且类是为此,因此获得了呼叫方法。

  这是春季的重要类型。它可以将普通类包装到弹簧容器中。当您需要获取此类的bean时,只需调用该方法即可。

  这是用于生成的重要类,它是用于获得实例和执行数据库操作的类。

  它可以定义大量配置,其方法如下:

  实际上,在配置文件中配置的内容可以在此处找到相应的方法。在示例演示中,仅设置数据源和文件的文件路径。

  了解相关功能后,让我们看一下方法:

  我们继续输入该方法:

  首先,此方法很长。以上代码是简化的代码。省略的是在大部分中设置属性的代码。其余的是两个功能:

  这两个属性也在其中设置。

  处理方法后,将其注册到弹簧容器。

  注册到无法实现的弹簧容器自动注入,例如:

  实现此功能是信用。

  在中间,我们配置这样的注释:

  这是道路路径,也是扫描的袋子路径。

  我们进入:

  在中间,有一个标签介绍了一个类:让我们看看它的作用。

  3.1的代码如下:

  已经意识到,在其中注入一些弹簧容器,我们继续输入该方法以查看注射是什么:

  该方法是首先创建一个,然后是分析的各种属性,然后将其添加到中间,然后调用容器。上面的方法是简化的代码。由于配置更多的支持配置,原始代码非常长。简化的代码仅保留我们设置的值,该值设置为中间。

  因此,整体仅在弹簧容器中注册:

  3.2接下来,我们指向我们的眼睛:

  意识到,这是Spring提供的一种,可以在春季执行的早期定向容器中注册。它提供了两种方法:(自定义某些行为)和(处理注册)。因为该方法是空的,因此该方法为空,因此已实现,因此实现了该方法,因此实现了方法,因此实现了该方法,因此实现了该方法,因此实现了该方法,因此该方法已实现,因此该方法已实现,因此实现了该方法,因此实现了该方法,因此实现了方法,因此实现了方法,因此实现了该方法,因此实现了方法,因此实现了该方法,因此实现了该方法,因此实现了该方法,因此实现了该方法,因此实现了该方法,因此实现了该方法,因此实现了该方法,因此实现了该方法,因此实现了该方法,因此实现了该方法,因此实现了该方法,因此实现了该方法,因此实现了该方法,因此实现了该方法,因此实现了该方法。我们专注于方法。

  在该方法中,首先创建一个实例。此实例的主要功能是用于处理的扫描功能,然后在实例上执行一些属性设置。这些属性大多数来自设置。在这种方法中,满足条件的人将被转换为弹簧容器。

  接下来,我们重点关注。

  3.3

  可以看出,继承,熟悉春天的朋友并不陌生。它是用于处理春季注释扫描的类,也就是说,基础扫描底层也以相同的方式使用。

  1.我们知道Spring仅在扫描软件包下标记了注释类,但这只是一个接口。为什么可以扫描?这是功能,在中间我们也看到了它的呼叫:

  让我们看一下注册过滤器配置的方法:

  此方法中有一些过滤器配置。在这里,我们只关注处理。相关代码是:

  这表明包装下的所有类别和接口都将被扫描。

  2.准备工作完成后,让我们看一下特定的扫描过程,即方法,没有重写该方法,Spring提供的方法称为:

  该方法已重写,我们输入该方法:

  继续调用父类扫描的方法,然后调用扫描结果。结果结果如下:

  承销已被扫描。是的,这是一个接口。它如何实例化?这是功能,我们继续观看。

  3.该方法的代码如下:

  此方法仍然有点长。简化后,代码相对清晰。让我们看一下如何用BeanClass替换它:

  在这三个步骤之后,您可以放心地创建一个示例:

  我们想要的是,但是春天为我们创造了什么,两者之间的关系是什么?我们输入一个发现:

  从代码的角度来看,它继承,类型是我们处理结构方法的类型:

  这样,值等同于。

  除了建设性方法外,该方法还设置了其他一些值。在这里,我们专注于设置和设置。

  如果您查看设置,如果配置了配置,则将设置为属性。如果未配置,则取决于是否有配置。如果配置配置,请直接设置。

  处理设置操作时,有两点要注意:

  设置非常相似,在这里不再分析。

  在我们的演示中,没有配置///,它来自哪里?

  请注意该方法,如果值为值,则将有一个关键操作:

  此设置表明注射模式将根据类型注入。处理弹簧时,将搜索它以设置其值。

  在我们的示例演示中,该方法如下:

  Spring将首先获取方法,然后了解参数类型,然后从弹簧容器中找到BEAN的类型。我们创建了这个豆:

  找到类型的bean后,将bean用作调用方法的参数。作为如何设置特定操作(即操作)。

  一词中,Spring提供了参数,负责特定设置。

  4.注入:将bean注入弹簧容器中,如何自动注入时如何获取相应的bean?实际上,当自动处理弹簧时,它将要求实际表示实际表示。我们输入的方法:我们输入:

  该方法分为两个部分:使用,让我们首先查看该方法,它在内部:

  这个方法只是简单地返回。我们以前没有设置,这是从哪里来的?调试后,我们发现它来自它:

  调用该方法时,它将被创建。LET的输入以查看其处理逻辑的方式:

  在两个重要的会员变量中:这是该机构的内部,其例子是,我们稍后进行分析。

  回到方法,阅读后,让我们看一下逻辑:

  该方法相对简单,这是首先获得的实例,然后从中获得。

  可以看出,调用该方法时是创建实例的。关于创建过程,这些是相关的内容。本文主要关注春季的整合。这些没有分析。

  在上述步骤之后,可以成功获得该实例,并且可以将其注入和成功。

  接下来,让我们看一下数据库的执行操作,这是方法。

  关于执行过程,在Mybatis源代码分析中02:SQL语句的执行已进行了详细分析,并且不会重复本文。本节我们主要关注相关操作。

  在先前的分析文章中,所提供的默认实现不是线程安全性。在上一个中,它对线程安全有用吗?我们通过调试对其进行分析。

  在通话过程中,经过一系列通话堆栈后,该方法最终将到来:

  在该方法中,该方法将被调用以获取数据,这是:

  再次输入:

  这是调用对象查询的方法。对于结构方法分析的上一节,我们提到它是在中间创建的:

  没错,这是一个动态的代理对象。它的实例将首先执行。

  在此方法中,它主要是处理的处理,并且在获得该方法后将调用原始方法。该线程是安全的吗?从操作的角度来看,其实际类型仍在线程安全吗?不一定,测量线程安全是否不一定是安全的。如果每个线程都有其自己的,则不会通过跨线程共享,即使非线程安全,整个操作仍然是线程安全的。

  每个线程都有自己的方式,也许您已经想到了!这就是提供的方式,并且由于它与Spring结合在一起,因此该功能具有弹簧的主机来完成,让我们看看:

  从代码的角度来看,它将在获得时新构建。它是由所有线程共享的,还是该线程独有的?关于本文,本文不打算分析,我们直接查看其方式:

  从这种方法的角度来看,它用于返回绑定到当前线程的资源。这意味着可以获得线程垄断,因此没有线程安全问题。

  此外,根据我自己的验证,只有在打开时才将其保存。如果未打开该交易,则始终获得,每次您致电时都会创建一个新的交易。

  在这里,我们了解到执行该方法时,弹簧容器是托管,并且线程是专门的。

  本文主要分析Mybatis和Spring的集成过程:

  本文中的原始链接:https://my.oschina.net/funcy/blog/4952679,仅限于作者的个人级别,文章中有不可避免的事情,欢迎使用CROCKE!请与作者联系以获取业务重印。请指示非商业重印的来源。

  原始:https://juejin.cn/post/7102812278247915533