深入学习Spring
文章平均质量分 93
Apple_Web
吃苹果的程序员正在努力ing...
展开
-
全网最全解析!Spring与非Spring环境下获取动态代理对象的原始目标对象
为什么这个userSerivce代理对象里面又是一个CGLIB$CALLBACK_0变量???为什么这个userMapper代理对象里面是一个h变量???关于这个问题的话,我在之前的文章中其实已经讲到了,这里面涉及到了两种动态代理的原理,可以看我之前文章深入探索JDK动态代理:从入门到原理的全面解析探索Cglib:解析动态代理的神奇之处今天我们不讨论这个问题,我们讨论另外一个问题,如何获取这两种动态代理对象里面的原始目标对象???原创 2024-04-01 20:59:31 · 1103 阅读 · 0 评论 -
深入探索JDK动态代理:从入门到原理的全面解析
为了调试目的,我们要查看或修改这些动态生成的代理类,正常我们还需要反编译工具(比如JD-GUI或JAD)来查看生成的类的源代码,但是我们不用那么麻烦,直接用IDEA打开即可。在标准的Java JDK实现中,生成的动态代理类(字节码)默认是在内存中动态生成并直接加载的,不会写入磁盘成为文件。现在,我们可以编写一个测试类来验证动态代理的使用,这个例子中,我们通过动态代理实现了一个代理对象,当调用代理对象的方法时,会先执行。添加了这个系统属性后,当创建动态代理实例的时候,JVM会将生成的代理类以。原创 2024-03-24 21:20:42 · 1136 阅读 · 0 评论 -
探索Cglib:解析动态代理的神奇之处
CGLIB(Code Generation Library)是一个开源项目!是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Java接口。Hibernate用它来实现PO(Persistent Object 持久化对象)字节码的动态生成。CGLIB是一个强大的高性能的代码生成包。它广泛的被许多AOP的框架使用,例如Spring AOP为他们提供方法的interception(拦截)。原创 2024-03-09 19:18:37 · 798 阅读 · 0 评论 -
源码透析MapperScannerRegistrar和MapperScannerConfigurer的区别及作用
在使用Spring Boot和MyBatis整合的时候,我们经常会看到@MapperScan这个注解,它的作用是扫描指定包下的Mapper接口,并将它们注册到Spring容器中,这样我们就可以在Service层或者Controller层直接注入Mapper接口的实例,而不需要写DAO层的实现类。那么,@MapperScan这个注解是如何实现这个功能的呢?它背后涉及到了两个重要的类:MapperScannerRegistrar和MapperScannerConfigurer,它们之间有什么区别和联系呢?原创 2024-01-21 18:04:17 · 1138 阅读 · 0 评论 -
带你拿捏SpringBoot自动装配的核心技术?模块装配(@EnableXXX注解+@Import)+ 条件装配(@ConditionalXXX)
之前文章我们完整的学习了模块装配的核心使用方法,通过模块装配,咱可以通过一个注解,一次性导入指定场景中需要的组件和配置。使用的时候就只需要传入对应的.class即可,原来的是直接传入Condition接口的实现类,现在这个ConditionalOnBean注解相当于封装了一层。等重要对象信息,根据这些对象就可以获取和检查spring容器初始化时所包含的所有信息,再结合业务需求,就可以实现组件注册时的自定义条件判断。根据条件的不同,这个自动配置类可能会在Spring容器中自动配置一些与JPA相关的Bean。原创 2024-01-14 15:49:52 · 1067 阅读 · 0 评论 -
@EnableXXX注解+@Import轻松实现SpringBoot的模块装配
最早我们开始学习或接触过 SSH 或者 SSM 的框架整合,大家应该还记得那些配置文件有多烦吧,又多又不好记真的很让人头大。在处理配置文件的同时,大家是否有想过:如果能有一种方式,可以使用很少的配置,甚至不配置就可以完成一个功能的装载,那岂不是省了很多事?这个疑问在 SpringBoot 中得以解决,也就是我们常说的自动装配,而这个自动装配的核心技术就是模块装配 + 条件装配。今天我们这里主要讲解模块装配,条件装配我们后续再讲解!原创 2024-01-02 20:04:42 · 1747 阅读 · 1 评论 -
Mybatis-Spring整合原理:MapperFactoryBean和MapperScannerConfigurer的区别及源码剖析
1.是一个包扫描的配置类,其中属性是必需的,多个包时可以使用逗号隔开。二选一即可。如果都选了那么根据引用的创建的SqlSession会被覆盖掉。如果两个都没配置,将会根据类型自动装配,这种方式适合应用程序中只有一个或者的bean存在。其它配置就不总结了。2. 具体实现扫描以及注册接口的功能被委托给类了。具体做法就是将Spring扫描接口后生成的修改成一个表示的,而是一个实现的特殊bean,相当于返回Mapper接口实例的工厂。具体返回接口实例的原理是MyBatis本身的接口绑定功能,底层其实是动态代理。原创 2023-12-16 23:18:00 · 1191 阅读 · 0 评论 -
Mybatis与Spring结合深探——MapperFactoryBean的奥秘
在没有Spring单独使用Mybatis的时候,我在之前的文章超硬核解析Mybatis动态代理原理!只有接口没实现也能跑?讲解到了调用链路在SqlSessionFactoryBuilder().build方法 中最终调用Configuration对象的addMappper()方法(实际上是委托给MapperRegistry的addMapper)添加对应的MapperProxyFactory代理工厂类,最终通过这个工厂类生成对应的代理对象MapperProxy。原创 2023-12-10 23:57:07 · 1267 阅读 · 0 评论 -
究竟FactoryBean是什么?深入理解Spring的工厂神器
在Spring框架中,bean的创建通常交由Spring IoC容器负责,它提供了丰富的方式来创建和管理bean的生命周期。在众多的功能中,以一种特别的方式出现,不仅让我们能够控制bean的创建过程,还使得更复杂的初始化逻辑变得简洁清晰。接下来,让我们 一步步地走进的世界,并通过案例解析来透彻理解它在Spring应用中的使用。是Spring提供的一种特殊的bean,使用它可以生成某些需要复杂初始化过程的bean对象。当配置某个bean实现了接口时,该bean返回的对象不是本身,而是。原创 2023-11-26 19:18:40 · 1262 阅读 · 0 评论 -
面试官:听说你很了解Java8特性,给我优化一下这段代码吧?
在之前的一次面试过程中,我被问到了一道代码优化题:对于下面的代码,你有什么优化的思路呢?原创 2023-10-24 21:12:19 · 186 阅读 · 0 评论 -
Spring事务this自调用的理解误区?真的会让事务失效吗?
我们经常谈到Spring事务失效会有多种场景导致:可参考我另外一篇文章一文清晰讲解@Transactional 注解失效场景@Transactional 应用在非 public 修饰的方法上@Transactional 注解属性 propagation 设置错误@Transactional 注解属性 rollbackFor 设置错误同一个类中方法调用,导致@Transactional失效异常被你的 catch“吃了”导致@Transactional失效数据库引擎不支持事务。原创 2023-09-27 00:25:38 · 1916 阅读 · 0 评论 -
深入探究Spring Boot自动配置原理及SPI机制:实现灵活的插件化开发
在传统的Spring应用程序中,我们需要手动配置各种组件、依赖和属性,以满足应用程序的需求。这通常涉及编写大量的XML配置文件或Java配置类,并进行复杂的依赖注入和组件装配。这种手动配置过程可能非常繁琐且容易出错。而Spring Boot的自动配置机制通过约定大于配置的原则,基于应用程序的依赖和配置信息,自动推断和配置应用程序所需的各种组件。它通过提供默认的配置和装配规则,减少了我们的工作量,使得我们可以更专注于业务逻辑的开发。接下来就讲解一下自动配置的原理实现。原创 2023-09-17 20:44:40 · 549 阅读 · 0 评论 -
解密Spring事务生效的内部机制
方法调用前的处理:事务拦截器在目标方法调用前执行一些预处理操作。这包括检查当前是否存在事务上下文(TransactionContext),如果不存在则创建新的事务上下文。事务上下文包含了事务的相关信息,如事务的传播行为、隔离级别、超时设置等。事务拦截器还会根据事务定义的属性决定是否开启新的事务或者加入已有的事务。方法调用:事务拦截器将目标方法调用传递给实际的目标对象,并执行目标方法。方法调用后的处理:在目标方法执行完成后,事务拦截器会根据方法的执行结果决定是提交事务还是回滚事务。原创 2023-09-02 18:36:41 · 248 阅读 · 0 评论 -
Spring为什么要专门定义BeanDefinition ,有Class不行吗?
借助 IDE ,打开的接口定义,从方法列表上看,Bean 的类信息 - 全限定类名 ( beanClassName )Bean 的属性 - 作用域 ( scope ) 、是否默认 Bean ( primary ) 、描述信息 ( description ) 等Bean 的行为特征 - 是否延迟加载 ( lazy ) 、是否自动注入 ( autowireCandidate ) 、初始化 / 销毁方法 ( initMethod / destroyMethod ) 等。原创 2023-08-26 17:23:01 · 174 阅读 · 0 评论 -
深入探索Spring后置处理器:解析作用与实际应用场景
BeanDefinitionRegistryPostProcessor BeanFactoryPostProcessor InstantiationAwareBeanPostProcessor BeanPostProcessor是spring生命周期中常见的4个后置处理器,但是对于其作用和执行顺序很多人还不是非常清楚,这里给大家讲解一下其作用以及执行顺序,并带上实操。原创 2023-08-19 15:05:15 · 1304 阅读 · 0 评论