- 博客(51)
- 收藏
- 关注
原创 SpringBoot 扩展篇:ConfigFileApplicationListener源码解析
SpringBoot的配置文件加载由ConfigFileApplicationListener完成的,它会加载application.properties、application.yml等配置文件,还支持用户配置和扩展。本文从源码的角度分析它的原理。加载完毕的配置信息最终都会放入到Environment中。ConfigFileApplicationListener定义在spring.factories中。SpringBoot 源码解析3:事件监听器。
2024-05-03 09:33:24
818
原创 SpringBoot扩展篇:循环依赖源码链路
我们可以看到,如果当前bean被代理了,那么就会在AbstractAutoProxyCreator中缓存了当前bean对应的代理bean,那么三级缓存会返回代理bean,否则就会返回当前bean。从缓存中逐级获取,如果缓存中找到了对应的Bean,那么就会返回bean,getBean方法调用结束。否则,就会创建Bean,放入缓存,然后返回bean。一个bean只会缓存在一个缓存中,在加入到一个缓存的时候,会移除其他两个缓存。可以看到,三级缓存中存放的是ObjectFactory,函数式接口。
2024-03-25 08:31:03
940
原创 SpringBoot 源码解析7:Bean的创建② AbstractAutowireCapableBeanFactory#createBean
1.概述2. 单例Bean的创建3. createBean源码4. AbstractAutowireCapableBeanFactory#doCreateBean 源码5 实例化Bean - AbstractAutowireCapableBeanFactory#createBeanInstance6 推断构造器7. instantiateBean 实例化Bean8. AbstractAutowireCapableBeanFactory#initializeBean 初始化bean。
2024-03-11 12:22:08
1110
原创 SpringBoot扩展篇:Spring注入 @Autowired & @Resource
Autowired注入是由AutowiredAnnotationBeanPostProcessor完成的。@Resource注入是由CommonAnnotationBeanPostProcessor完成的。由于两种方式代码重复率太高,原理基本一致,下面我们主要以AutowiredAnnotationBeanPostProcessor源码分析为主。AutowiredAnnotationBeanPostProcessor负责属性、方法的注入。
2024-03-11 09:38:43
1077
原创 SpringBoot 源码解析5:ConfigurationClassPostProcessor整体流程和@ComponentScan源码分析
SpringBoot源码解析,核心注解支持ConfigurationClassPostProcessor,@ComponentScan源码解析
2024-01-21 12:27:40
1122
原创 SpringBoot 源码解析2:启动流程
在onApplicationEnvironmentPreparedEvent方法中,加载了spring.factories文件中的所有EnvironmentPostProcessor,并且把当前对象放入到集合中,然后根据order排序,再回调postProcessEnvironment方法。根据不同的webApplicationType创建不同的ApplicationContext,这里创建的是AnnotationConfigServletWebServerApplicationContext。
2023-12-16 14:19:51
2296
原创 SpringBoot 基础概念:SpringApplication#getSpringFactoriesInstances
获取到ClassLoader,通过ClassLoader加载到所有的META-INF/spring.factories文件资源。在解析spring.factories文件的过程中,第一次就将所有的spring.factories文件加载了,对classLoader进行了缓存,避免重复加载创建多个实例。参数:type的类名为key,也就是上图黄色的部分,真正实例化的类是上图中绿色的部分。args为构造方法中参数的值。在SpringBoot启动的过程中,spring.factories资源在一开始就被解析了。
2023-12-15 15:57:00
644
原创 Mybatis源码解析6:Mapper执行流程2-三个Handler
之前已经对 SimpleExecutor#doQuery。StatementHandler是对Statement进行处理,ParameterHandler是对参数的设置进行处理,ResultSetHandler是对Statement执行的结果集进行处理。
2023-12-11 13:09:02
68
原创 Mybatis源码解析7:拦截器Interceptor
在SqlSessionFactoryBuilder解析mybatis-config.xml的时候,会通过XmlConfigBuilder对plugin标签进行解析。遍历interceptor,调用plugin方法。而我们自定义的拦截器,一般都是通过Plugin#wrap对interceptor进行封装。创建RoutingStatementHandler,通过拦截器链进行插件化。
2023-12-11 10:57:55
257
原创 Mybatis源码解析5:Mapper执行流程1
创建MapperMethod对象,其中的方法签名MethodSignature解析了方法的信息,我们最常用的@Param注解就是在这个时候解析的–ParamNameResolver。这里又定义了一个localCache缓存,缓存中没有,就queryFromDatabase从数据库中查询。如果有缓存,就从缓存里面取;没有缓存,就从数据库查询,这里是委托SimpleExecutor查询。通过transaction获取连接对象,如果开启了日志,那么就创建代理对象,可打印日志。
2023-12-11 09:58:55
136
原创 MybatisPlus源码解析3:元数据处理器-MetaObjectHandler
功能:MetaObjectHandler在insert和update的时候,对参数的属性进行填充,可以对数据库的通用字段(比如:创建人、创建时间、更新人和时间等)进行赋值操作。原理:MetaObjectHandler对参数的元数据进行处理。创建ParameterHandler -> 创建ParameterHandler -> 对传入的对象进行了参数的填充。
2023-11-01 15:06:53
555
原创 MybatisPlus源码解析1:mybatis-plus启动流程
具体实现如下:由于MapperScan注解被@Import(MapperScannerRegistrar.class)所标注,spring在创建beanFactory容器之后,会调用org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor#postProcessBeanDefinitionRegistry来实现beanDefinition的装配,其中就包括了@Import注解。
2023-10-18 14:41:30
507
原创 MybatisPlus源码解析2:mybatis-plus启动流程之Sql注入器-SqlInjector
负责注入sql的核心代码@OverrideClass<?// 循环注入自定义方法} else {获取Mapper接口的泛型,也就是User.class获取mapperRegistryCache, mapperRegistryCache缓存已注入CRUD的Mapper信息初始化table信息获取modelClass(也就是User.class)的所有方法,然后调用inject方法注入sql。
2023-10-18 14:40:34
553
原创 spring-mybatis源码分析之spring如何获取到UserMapper实例的?
spring集成mybatis,spring是如何获取到UserMapper的
2022-03-05 14:41:40
541
原创 redis订阅发布
redis订阅发布1.项目结构2.pom.xml3.RedisConfig4.消息监听4.TestSendController5.MyApplication6.启动项目1.项目结构2.pom.xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId>
2020-06-05 15:47:17
156
原创 第三方qq登陆(支持扫码)
QQ第三方登录1 导包2 配置3 建包oauth2并扫描4 编写qqcontroller5 登录页面加入QQ登录6 修改hosts配置文件1 导包 <dependency> <groupId>net.gplatform</groupId> <artifactId>Sdk4J</artifactId> <version>2.0</version> </dependency>2 配置最好查看q
2020-05-23 11:11:21
1420
原创 jvm优化
1.JVM优化1.1什么是JVM与JVM的初次见面,是在我们Java SE课程的开始,讲解Java跨平台原理的时候.时隔多日,我们先来回顾一下.Java的广告语是,”编写一次,到处运行”,而它凭借的就是JVM(Java Virtual Machine).而对于不同的平台,Windows,Linux,Mac OS等,有具体不同的JVM版本.这些JVM屏蔽了平台的不同,提供了统一的运行环境,让Java代码无需考虑平台的差异,运行在相同的环境中.下图即Oracle官网下载JDK 8时所需要进行选择的页面
2020-05-23 11:09:48
302
原创 vue入门
一.什么是VUE渐进式的Javascript框架 MVVM(Model,View,ViewModel)模式二.VUE基本语法2.1 Vue的基本使用引用vue.js准备要挂载的标签创建vue对象,进行挂载 Title {{message}}2.2 el指定相应的挂载对象可以使用id,class,标签(建议使用id挂载)挂载后代表这个标签被vue接管2.3 datavue对象准备的数据这个数据发生变化后,用到它的view部分
2020-05-23 11:08:46
125
原创 单点登录介绍
1. 单点登录介绍(sso)单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任。单点登录在大型网站里使用得非常频繁,例如像阿里巴巴这样的网站,在网站的背后是成百上千的子系统,用户一次操作或交易可能涉及到几十个子系统的协作,如果每个子系统都需要用户认证,不仅用户会疯掉,各子系统也会为这种重复认证授权的逻辑搞疯掉。实现单点登录说到底就是要解决如何产生和存储那个信任。2. Cookie方式
2020-05-12 18:49:53
514
原创 kafka-demo
消息服务-stream-kafkaSpring Cloud Stream本质上就是整合了Spring Boot和Spring Integration,实现了一套轻量级的消息驱动的微服务框架。通过使用Spring Cloud Stream,可以有效地简化开发人员对消息中间件的使用复杂度,让系统开发人员可以有更多的精力关注于核心业务逻辑的处理。安装kafka添加链接描述创建消费者项目springcloud-kafka-consumerpom 文件如下:<?xml version="
2020-05-12 18:49:12
222
原创 代理模式
代理模式1、代理模式2、静态代理2.1定义接口2.2定义接口的实现类 RealSubject并实现该接口,重写方法--被代理对象2.3定义接口的实现类ProxySubject并实现该接口重写方法。自定义属性RealSubject,调用request方法,在这里进行增强2.4测试类2.5测试结果3、JDK动态代理3.1定义接口IUserDao3.2定义接口实现类,实现某接口,并重写该方法3.3测试类:(重点)3.4实现效果4、cglib动态代理4.1 创建被代理的类4.2 测试类:(重点)4.3 实现效果5、
2020-05-12 18:47:01
115
原创 SpringAOP的xml和注解两种实现方式
SpringAOP的xml和注解两种实现方式1、SpringAop的实现方案2、maven导包3、xml实现aop的方式3.1项目结构3.2 IUserService3.3 UserviceImpl3.4 TxManager3.4 重点:SpringTest-context.xml配置3.6 测试SpringTest3.7 打印结果4、全注解实现aop(通常使用)4.1项目结构4.2 IUserService4.3 UserviceImpl4.4 SpringTest-context.xml4.5 重点 T
2020-05-12 18:45:42
374
原创 MyBatis的Mapper接口动态代理原理
MyBatis的Mapper接口动态代理原理1、什么是mapper接口的动态代理创建sqlsession对象不使用动态代理使用动态接口代理2、mapper接口动态代理的代码实现2.1假定一个接口2.2使用java的动态代理方式,创建一个类2.3测试代码1、什么是mapper接口的动态代理创建sqlsession对象Reader reader = Resources.getResourceAsReader("mybatis-config.xml");sqlSessionFactory = new S
2020-05-12 18:44:59
383
原创 SpringBoot入门
SpringBoot入门1.导入maven包2.在resources根目录下配置application.propertie或者application.yml3.新建cn.itsource包,然后在写一个Application.java文件4.新建cn.itsource.model,并写一个实体类Country.java5.新建cn.itsource.mapper包并写CountryMapper.java6.早resources下面创建cn.itsource.mapper并创建映CountryMapper.x
2020-05-12 18:43:57
183
原创 关于Springcloud的RestTemplate使用服务名报异常java.net.UnknownHostException
关于Springcloud的RestTemplate使用服务名报异常java.net.UnknownHostException和使用localhost:8081报异常java.lang.IllegalStateException: No instances available for localhost问题1.关于java.lang.IllegalStateException: No instances available for localhost问题2.关于Springcloud的RestTemplat
2020-05-12 18:43:19
14200
6
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人