
spring全家桶
文章平均质量分 94
一起探索spring框架把
又 欠
欲速则不达 欲达则欲速
展开
-
SpringBoot的自动装配源码分析
在传统的Spring框架中,我们需要手动配置和管理Bean的依赖关系,但在Spring Boot中,大量的配置可以自动完成。这是因为Spring Boot中引入了自动装配的概念。自动装配指的是根据应用程序的依赖关系自动配置Spring Bean,而无需手动配置。手动装配比如在下面代码中,我创建了一个cat和一个dog。然后通过手动方式把他注入到people类的属性cat和dog中。自动装配。原创 2023-08-30 18:46:14 · 638 阅读 · 0 评论 -
Spring 事务源码分析
Spring事务是一种用于管理数据库操作的机制,它确保一组相关的数据库操作要么全部成功提交,要么全部失败回滚。事务可以保证数据的一致性和完整性。在Spring中,事务可以通过编程式事务管理和声明式事务管理两种方式来实现。编程式事务管理是通过编写代码来手动管理事务的开始、提交和回滚。而声明式事务管理是通过在方法或类级别上添加注解来指定事务的属性,Spring框架会自动管理事务的开始、提交和回滚。原子性(Atomicity):事务中的所有操作要么全部成功提交,要么全部失败回滚。原创 2023-07-20 18:39:33 · 350 阅读 · 0 评论 -
Mybatis自定义分页插件及PageHelper源码分析
Mybatis作为一个应用广泛的优秀的ORM开源框架,这个框架具有强大的灵活性,在四大组件(Executor、StatementHandler、ParameterHandler、ResultSetHandler)处提供了简单易用的插 件扩展机制。Mybatis对持久层的操作就是借助于四大核心对象。MyBatis支持用插件对四大核心对象进行拦截,对mybatis来说插件就是拦截器,用来增强核心对象的功能,增强功能本质上是借助于底层的动态代理实现的,换句话说,MyBatis中的四大对象都是代理对象。原创 2023-06-01 14:48:25 · 2119 阅读 · 0 评论 -
mybatis的一级二级缓存详解及源码解剖
一级缓存是指在同一个SqlSession中,对于相同的查询语句和参数,第一次查询的结果会被缓存到内存中,后续的查询会直接从缓存中获取结果,而不会再次查询数据库。一级缓存是MyBatis默认开启的,可以通过在SqlSession中调用clearCache()方法来清空缓存。二级缓存是指在多个SqlSession中,对于相同的查询语句和参数,第一次查询的结果会被缓存到内存中,后续的查询会直接从缓存中获取结果,而不会再次查询数据库。二级缓存是需要手动开启的,可以通过在Mapper.xml文件中添加标签来开启。原创 2023-05-19 14:44:20 · 2843 阅读 · 0 评论 -
SpringMVC(三):请求流程处理
如下是我画的一个简单的SpringMVC的请求流程图,接下来会通过请求流程图去进行源码分析。HandlerExecutionChain: 请求处理链,包括请求处理器和处理器拦截器等。它的作用是在请求处理过程中,按照一定的顺序调用各个处理器,确保在请求处理器执行前后,能够按照需要进行预处理和后处理。原创 2023-04-16 23:28:56 · 853 阅读 · 0 评论 -
SpringMVC(二):加载SpringMVC的九大组件之initHandlerMappings
在前面容器创建完成后,调用refresh方法时,spring会把所有的单例bean加载完成刷新后,会调用onApplicationEvent()监听事件,紧接着就会在调用DispatcherServlet的onRefresh()方法,进行9大组件的加载Spring MVC九大组件的名称和作用。由于精力有限,就通过initHandlerMappings的源码来看看springMVC是怎么去寻找我们设置的controller的,怎么去找到存储我们对RequestMapping对应请求的。原创 2023-04-09 15:51:42 · 485 阅读 · 1 评论 -
SpringMVC(一):初始化流程
我建立了一个SpringMVC的项目并且配置了一个tomcat,配置文件内容如下。web.xml配置文件mvc.xml配置文件。原创 2023-04-07 17:34:11 · 891 阅读 · 1 评论 -
Jdk动态代理和Cglib动态代理的区别
最后我们总结一下JDK动态代理和Gglib动态代理的区别:1.JDK动态代理是实现了被代理对象的接口,Cglib是继承了被代理对象。2.JDK和Cglib都是在运行期生成字节码,JDK是直接写Class字节码,Cglib使用ASM框架写Class字节码,Cglib代理实现更复杂,生成代理类比JDK效率低。3.JDK调用代理方法,是通过反射机制调用,Cglib是通过FastClass机制直接调用方法,Cglib执行效率更高。原创 2023-03-25 18:38:48 · 1106 阅读 · 0 评论 -
Spring是怎么解决循环依赖的
1.Spring有哪三级缓存// 从上至下 分表代表这“三级缓存” //一级缓存 用于存放完全初始化好的 bean,从该缓存中取出的 bean 可以直接使用 private final Map < String , Object > singletonObjects = new ConcurrentHashMap < >(256);原创 2023-02-26 14:09:21 · 900 阅读 · 0 评论 -
SpringBean的生命周期
在这一步主要做的就是类的定义,也就是做我们BeanDefinition的内容。ComponentScan:主要是定义spring要扫描哪些包下的文件,需要把哪些文件加入spring容器中。在确定我们扫描哪些包下的文件后,会先过滤不是.class的文件。然后在判断对应的.class类的文件是否存在Component注解。这个时候也会获取我们Com原创 2023-02-23 18:32:47 · 546 阅读 · 0 评论 -
java世界String的那些事
final可以用来修饰类、方法、变量,分别有不同的意义,final 修饰的 class 代表不可以继承扩展,final 的变量是不可以修改的,而 final 的方法也是不可以重写的(override)。那么为什么要保证String不可变呢?因为只有当字符串不可变时,才能实现字符串池。提高程序的效率。字符串池可以节约很多Heap空间,因为不同的字符串都指向了同一个字符串。但如果字符串是可变的,字符串池将不能被实现,因为字符串可变的话,如果变量改变了它的值,那么其它指向这个地址的字符串的值也会被改变。原创 2023-02-10 15:47:07 · 503 阅读 · 0 评论 -
该怎么去理解java中的异常
如果需要堆栈,但又没有收集这些信息,在复杂情况下,尤其是类似微服务这种分布式系统,会大大增加诊断的难度。综上,从一个常见的异常处理概念问题,简单总结Java异常处理的机制,并结合代码分析了一些普遍认可的最佳实践,以及业界最新的一些异常使用共识。这是因为在日常的开发和合作中,读代码的机会往往超过写代码,有义务让自己的代码能够直观地体现出尽量多的信息,而泛泛的Exception恰恰隐藏了我们的目的。生吞异常,往往是基于假设这段代码可能不会发生,或者感觉忽略异常是无所谓的,但是千万不要在产品代码做这种假设。原创 2023-02-07 18:01:45 · 549 阅读 · 0 评论