注意:此系列源代码分析基于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