
Spring
文章平均质量分 90
Spring
默辨
希望成为一个有思想的软件工程师
展开
-
浅谈Spring体系的理解
本文不涉及细节,主要回答两个问题: 1. Spring家族技术生态全景图有哪些 2. Spring Framework架构下每个模块有哪些东西,以及部分模块之间的关联关系原创 2024-03-30 10:26:35 · 539 阅读 · 0 评论 -
TaskExecutor和ExecutorService的简单整合
自己负责的项目想通过引入一个中间件,达到在业务场景维度的全链路日志监控。当接入相关中间件后,发现如果在业务中开启了多线程,链路日志就会缺失。当然,该中间件官方给出了解决办法,那就是使用中间件提供的工具类对线程池包装一下(TrackTraceHelper.wrappedExecutorService(executorService))就可以解决。当然这个问题确实解决了,但我们还存在以下几个问题:问题一:项目原本使用的线程池是Spring的ThreadPoolTaskExecutor,在其setTaskDe原创 2023-07-15 23:57:05 · 1689 阅读 · 0 评论 -
浅谈Spring中事务管理器
由于事务部分代码在设计上整体比较简单,我自己觉得它在设计上没有什么特别让我眼前一亮的东西,所以下文更多的是侧重执行流程,能理解事务管理器等一众概念以及相关的变量含义,真正遇到Bug会调试,知道在什么地方打断点就行。后文更多的是代码+注释的形式呈现(注意,而且根据Spring的不同版本,代码实现上也略有差异),请配合自己项目源码慢慢食用。原创 2023-02-19 21:35:34 · 1253 阅读 · 0 评论 -
浅谈SpringAOP功能源码执行逻辑
如题,该篇博文主要是对Spring初始化后AOP部分代码执行流程的分析,仅仅只是粗略的讲解整个执行流程,喜欢细的小伙伴请结合其他资料进行学习。在看本文之前请一定要有动态代理的基础,否则后后半部分内容就像是坐牢,因为我写的比较简略。如果对动态代理不熟悉的小伙伴,可以参考我之前的博客:浅谈Cglib、Jdk以及ProxyFactory实现动态代理上的区别,两篇结合着看。可以这么说,在明白了Cglib、Jdk动态代理以及使用ProxyFactory实现动态代理的基础上,Spring的AOP后半部分的代码,原创 2021-10-15 00:20:47 · 679 阅读 · 0 评论 -
浅谈Cglib、Jdk以及ProxyFactory实现动态代理上的区别
动态代理就是在不改变原代码逻辑的基础上,对代码功能进行增强。文章目录一、Jdk动态代理二、Cglib动态代理三、ProxyFactory动态代理四、Spring中AOP源代码分享一、Jdk动态代理Jdk的动态代理是基于接口的,即如果想要对目标对象进行增强,目标对象一定要实现某一个接口,因为传入的参数就是接口。在Spring与MyBatis的整合过程中,就是使用jdk的动态代理,对Mapper文件进行代理,最终成为Spring中的Bean对象。1、新增一个UserService接口2、新原创 2021-10-12 23:44:31 · 598 阅读 · 0 评论 -
Spring解析@ComponentScan注解的执行流程
文章目录1、测试入口2、AbstractApplicationContext类的refresh方法3、PostProcessorRegistrationDelegate类的invokeBeanFactoryPostProcessors方法4、ConfigurationClassPostProcessor类的processConfigBeanDefinitions方法5、ConfigurationClassParser类的parse方法6、ConfigurationClassParser类的processCo原创 2021-10-07 20:42:18 · 1265 阅读 · 0 评论 -
Spring整合MyBatis为什么导致MyBatis一级缓存失效
文章目录一、搭建失效场景使用MyBatis查询同一条SQL使用Spring整合MyBatis查询同一条SQL二、原理分析(重点)明白的其它知识点调用入口是接口中getObject方法为什么加了@Transactional注解就可以使用缓存再总结如题,Spring整合MyBatis为什么会导致MyBatis的一级缓存失效?一、搭建失效场景测试用例为,查询一个String类型的字符串基础的环境配置、扫描路径配置就不再重复,直接看测试数据相关的代码信息1、对应的mapper接口及对应的SQL语句原创 2021-10-01 15:45:07 · 1642 阅读 · 1 评论 -
Spring依赖注入流程【完整版】(populateBean方法内部执行流程)
本文主要讲解Spring生命周期中实例化后的方法。方法入口为populateBean(beanName, mbd, instanceWrapper),该方法除了调用InstantiationAwareBeanPostProcessor接口的postProcessAfterInstantiation方法(实例化后扩展接口),还会进行属性的依赖注入,即给@Bean中符合要求的字段进行属性填充。文章目录一、DI整体流程图二、需明白知识点三、待补充知识点一、DI整体流程图我将具体的依赖注入步骤整理为如下的原创 2021-09-21 23:34:52 · 1782 阅读 · 0 评论 -
浅谈Spring如何利用三个缓存Map解决循环依赖
通过本文你将了解到:Spring循环依赖的出现及解决流程一级缓存、二级缓存、三级缓存的作用Spring底层源码对于循环依赖关键部分的代码逻辑懒加载的合理使用可以避免循环依赖原型Bean的不恰当使用会引发循环依赖构造方法导致的循环依赖无法解决一、共识在了解循环依赖之前,我希望我们能有以下几个共识1、共识一Spring中循环依赖出现的场景有很多种,本文只重点讲述Bean成员变量之间相互引用出现的循环依赖换句话说,Spring循环依赖没有所谓的特定场景,只要出现两个类之.原创 2021-09-18 22:33:27 · 1666 阅读 · 1 评论 -
浅谈使用实现FactoryBean接口的方式定义Bean
在定义一个Bean的时候,我们可以直接实现FactoryBean接口,然后重写对应的getXxx方法,就能够完成一个Bean的定义工作文章目录一、使用实现接口的方式定义Bean二、其实是生成了两个Bean三、Spring容器对应这两个类的实例化方式四、传入&teacher和teacher名字时,获取Bean对象流程一、使用实现接口的方式定义BeanBean定义代码:@Componentpublic class Teacher implements FactoryBean { @Ove原创 2021-09-12 19:49:57 · 687 阅读 · 0 评论 -
浅谈BeanDefinition、BeanDefinitionMap、RootBeanDefintion三者的关系
文章目录一、BeanDefinition1、具体实现子类2、手动创建子类3、beanClass成员变量的含义二、BeanDefinitionMap三、RootBeanDefintion1、具体获取的流程通过本文你将收获:RootBeanDefintion、BeanDefinition、BeanDefinitionMap三者的关系即其基本含义BeanDefinition接口的实现子类BeanDefinition子类中beanClass成员变量的含义根据beanName获取RootBe原创 2021-09-12 10:53:22 · 2530 阅读 · 3 评论 -
通过BeanDefinitionReader获取BeanDefinition的三种不同方式
文章目录一、方式一二、方式二三、方式三四、总结在Spring源码中,Spring会先将类扫描为一个一个的BeanDefinition,用于存放Bean的一些基本信息,简称为Bean的定义信息。后续生成完整Bean时,直接从该集合中获取。该集合在DefaultListableBeanFactory类中,是一个十分重要的类。前期准备:实体类//在使用前两种方式时不需要添加注解,使用包扫描时需要添加注解//@Componentpublic class MoBian {}一、方式一原创 2021-09-07 23:36:15 · 1392 阅读 · 1 评论 -
MetadataReader、ClassMetadata、AnnotationMetadata的简单使用
在Spring源码中有很多场景会去解析类的信息,比如类名、类中的方法、类上的注解,这些都可以称之为类的元数据,在Spring中对类的元数据做了抽象,并提供了一些工具类。MetadataReader表示类的元数据读取器,默认实现类为SimpleMetadataReader测试代码如下:// 自定义注解@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Panpublic @interface Q原创 2021-09-07 22:47:20 · 1723 阅读 · 1 评论 -
获取指定路径,扫描路径下指定类(仿Spring)
本文目标:传入指定路径,扫描对应路径下符合要求的类,并添加到指定的集合中。其原型是Spring中初始化容器类的一部分。当然本例仅仅完成基本功能,没有考虑过多功能——即Spring中配置对应的CompontScan路径,并在类上添加@Component注解,即可完成将一个类添加到Spring容器。文章目录1、文件整体目录结构2、自定义注解3、编写被测试对象类4、编写一个配置类5、编写BeanDefinition类6、编写容器类(重点)7、测试类自定义两个注解(2个):类比理解Spring中@C.原创 2021-09-04 17:16:43 · 773 阅读 · 0 评论 -
浅谈Spring中Bean的生命周期
文章目录1、基本概念2、生命周期流程图3、源码与功能分析3.1、实例化前3.2、实例化3.3、实例化后3.4、初始化前前3.5、初始化前、中、后4、核心接口的简单代码实现4.1、简单实现4.2、简单再实现4.3、结论1、基本概念你只需要明白Bean生命周期的执行逻辑即可,不需要死磕对应的流程步骤及流程名字,希望本文对你有帮助。在初学Java时,我们需要new一个类,即可得到一个对象。学到框架时,我们只需要将类注册到Spring容器中,即可得到一个对象。本文主要讲述Spring中将一个类注册到原创 2021-07-25 17:32:31 · 2824 阅读 · 15 评论 -
Spring中定义Bean的6种方式(声明式+编程式)
文章目录一、声明式1、<\bean>标签2、@Bean注解3、@Component注解二、编程式4、BeanDefinition接口5、FactoryBean接口6、Supplier接口Spring中原生的定义Bean的方式可以分为两类六种,我们经常使用的仅是它其中一类中的三种。这个有点像Spring中的事务,我们熟悉的也仅仅是它的声明式写法——@Transaction,并不熟悉编程式的写法,或许你会说,可以,但没必要。此处我不做评价。Spring中定义Bean的方式可以分为两类,原创 2021-07-18 19:16:06 · 9160 阅读 · 6 评论 -
@Autwired自动注入XxxMapper接口原理(含mybstis-spring.jar源码)
文章目录一、引言二、代码编写1、业务类2、Spring容器启动类3、连接类(重点)3.1 ContextConfig核心配置文件类3.2 MobianMapperScan自定义注解类3.3 ProxyMapperBDRegistrar注册类3.4 MobianFactoryBean接口代理类3.5 总结4、测试结果三、源码对比1、@MobianMapperScan——@MapperScan2、ProxyMapperBDRegistrar——MapperScannerRegistrar3、MobianFact原创 2021-07-18 15:29:32 · 2256 阅读 · 6 评论 -
Spring支持的常用数据库事务传播属性和事务隔离级别
写在前面:三个月以前,我在B站看了敖丙的一个面试视频,对当时的我来说,真的就是一脸懵逼的进,一脸懵逼的出。三个月过去了,如今再回头看那个视频,最明显的感觉就是自己进步了,居然能听懂了。但是也发现了里面的一些问题,当然我现在想说的是指事物隔离级别那一块。今天偶然又看到了一个关于事务隔离级别的面试题,特来做个简单的总结!!!文章目录1、事务的传播行为1.1、传播行为简介1.2、事务的测试代码(这里只测试了两种)2、事务的隔离级别2.1、数据库事务并发问题2.2、事务的隔离级别2.3、测试代码(这里.原创 2020-06-09 15:16:09 · 934 阅读 · 2 评论 -
Spring知识点复习(第一次)
我认为Spring的学习任重而道远,他颠覆了传统EJB的开发,将JavaEE企业级开发引向了另一个高峰。无论时后来的Spring Boot还是后面的Spring Cloud都是Spring一家的。很多人都说可以不用学习Spring直接上手SpringBoot,我觉得没错,就像我最开始没有学习JavaWeb直接上手框架一样,虽然都能学,但是对于大部分人来说,中间少一个过渡的东西,总归是有些知其然不知...原创 2020-04-09 21:05:00 · 602 阅读 · 0 评论 -
手把手整合SSM项目(附源码)
学完了SSM框架,是时候来一波核心的总结了,力求做到不看视频,直接回忆起每一个步骤。所以这是一篇总结的博文。SSM是大部分人学习Java的一条必经之路,在此之前我对整合步骤也是模棱两可的,于是我就写下了这篇博客,想用最通俗文字、最直观的数字和图片帮助我也帮助你来串一串整个过程。加油!!!写作初衷,我最开始为了网上找一个项目应付学校的实验作业,可是网上转了一圈,发现要不就是不适合,要不就是看...原创 2020-04-03 20:56:52 · 5554 阅读 · 11 评论 -
Spring
全文大纲1、Spring1.1、简介1.2、优点1.3、组成(七大模块)1.4、拓展2、IOC理论推导2.1、最初的开发2.2、改进后的开发2.3、总结3、Hello Spring3.1、测试案例一3.2、测试案例二3.3、补充4、IOC创建对象的方式4.1、默认采用的是无参构造4.2、通过构造器创建5、Spring配置5.1、别名5.2、Bean配置5.3、import6、依赖注入6.1、构造器...原创 2020-03-11 15:53:21 · 985 阅读 · 0 评论