- 博客(50)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Spring Bean生命周期总览
在开篇里面先写一个总览肯定是有助于理解整个Spring Bean生命周期的流程的,根据流程去理解一定会事半功倍。比如我们生产可乐,就会有一个制造可乐的可乐工厂。当然 Spring 生成 bean 也有一个beanFactory。生产可乐还需要原材料比如蔗糖和碳酸,还有机器和设备。生成 bean 也需要原数据,这个元数据可以理解成 beanDefinition,还有beanFactory工厂的机器和设备,在此称之为beanFactory的属性。Spring Bean 生命周期一共分为两部分,第一个初始
2021-07-19 10:35:51
273
3
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 与其抖音,不如学习。
人生最宝贵的是生命,生命属于人只有一次。一个人的生命应当这样度过:当他回忆往事的时候,他不致因虚度年华而悔恨,也不致因碌碌无为而羞愧;在临死的时候,他能够说:“我的整个生命和全部精力,都已献给世界上最壮丽的事业为人类的解放而斗争。”...
2019-05-09 14:20:51
177
原创 Spring 循环依赖的三级缓存
在Spring Bean 的生命周期中,里面有一步就是填充属性。而填充属性之前会判 属性对象是否被当前对象循环依赖,当发现属性对象被循环依赖的时候会进行aop并且生成属性对象的代理对象。循环依赖是如何形成的当 对象UserA 实例化完成,进行填充属性UserB 的时候 ,先去单例池里面去获取 UserB 对象,初次没有获取到,开始实例化UserB ,当UserB 实例化完成,进行填充属性UserA 的时候,先去单例池里面去获取 UserA 对象,初次没有获取到,再去实例化UserA ,并进行填充属性U
2021-10-22 16:54:22
310
原创 Mybatis 处理 sql 语句
本文 mybatis 处理 sql 语句主要分为编译期间处理和执行期间处理另外 sql 语句又分为 静态 sql 语句 和动态 sql 语句,用参数修饰符来区分。静态 sql 语句:没有参数或者参数修饰符全部是 #{} 这种,并且没有其他标签动态 sql 语句:参数其中之一被 ${} 修饰,或者有标签Mybatis 对动态 sql 的定义mybatis 初始化完成后 所有处理完的 sql 语句都存在 SqlSourceConfiguration —》 MappedStatement–》 SqlS
2021-08-09 16:23:08
1786
原创 MyBatis 拦截器执行顺序
1.原始 jdbc 工作流程原始 jdbc 工作流程 以查询为例1 加载驱动Class.forName(Driver.class.getName())2 建立数据库连接Connection root = DriverManager.getConnection(“xx”, “xx”, “xx”)3 预编译sql语句PreparedStatement preparedStatement = root.prepareStatement(sql)4 占位符参数赋值preparedSt
2021-08-04 16:58:38
4636
原创 MyBatis 初始化总览
MyBatis 简介MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。简单点来说 MyBatis 做的事情就是在Java POJO 和 数据库之间 完成了 Java POJO 和 数据库语言的转换,相当于
2021-08-03 11:30:06
237
原创 Spring Aop 执行流程
闲聊在Spring Bean的生命周期中,处理aop的流程只有第一步处理通知和最后一步创建代理对象。可以说只要去掉第一步和最后一步,也不会影响SpringBean的生命周期。可见在生命周期中处理aop 和aop的理念是完全符合解耦的思想。切面的组成一个简单的切面AspectJ 通常可以由多个切入点Pointcut 和多个通知Advice 组成。切入点:切入点和切入点表达式相辅相成的存在,通常由切入点表达式决定切入点需要切入的位置通知:在切面里面,通知通常分为五种。分别是前置通知,环绕
2021-07-26 11:26:49
2167
原创 Spring Aop 前篇-如何解析表达式
Aspect 是如何解析表达式?或者说是如何通过表达式知道哪个对象需要被创建代理Spring 在解析 @Aspect 表达式其实用到的就是Aspect 包里面的API 。第一个对象 PointcutParser 顾名思义 切点解析器第二个对象 PointcutExpression 切点表达式对象如何去解析并命中对象呢1.构建PointcutParser Aspect APIPointcutParser pointcutParser = PointcutParser.getPoi..
2021-07-20 21:40:02
474
原创 手写 Mybatis篇
首先 Mybatis 的工作原理Mybatis 有四大对象,是一个责任链的设计模式,而Mybatis的工作原理就是这一条链。第一个对象 Executor 判断应该执行哪一种方法,在Mybatis中只有两种方法 select/update第二个对象ParameterHandler 解析请求参数 #{} 会预编译对比数据库字段和请求参数类型,${}不会对比,如果不匹配则直接抛出异常第三个对象StatementHandler 数据库对象,拿到sql语句并执行,分页插件就是重写了这条sql。..
2021-07-19 16:57:51
206
原创 手写 Spring Aop篇
上面三篇文档介绍了bean的生命周期。通知是如何绑定的,代理对象是如何产生的以及aop是如何调用的呢。一个aop切面包含了哪些内容了一个切面有多个切入点,每个切入点有不同的通知,通知分为before after around(此环境)around 的通知有两个也是之前和之后,这个之前会在before之前执行,这个之后会在after之前执行。那么aop是如何调用的呢。比如我们需要增强A类的query方法。如果A是一个接口,代理对象通过jdk动态代理生成,如果是一个类,代理对象通过cglib生成
2021-07-19 16:19:24
291
原创 手写 Spring MVC篇
上面的四篇文章介绍并写完了SpringBean的生命周期,现在开始来写Spring MVCSpring MVC我们只写一层 C层 即 Controller 控制层(没有父子容器)众所周知 Spring MVC有一个中央处理器 叫 DispatcherServlet,实现了HttpServlet 是一个Servlet既然是一个Servlet 肯定是要遵循Servlet的规范。我们通常知道的服务器一般有tomcat 和 jetty等等 ,这两个容器也实现了Servlet的规范。在容器运行完.
2021-07-19 15:48:22
240
1
原创 开始Spring Bean的生命周期
专栏第一篇文章介绍了生命周期的流程有哪些步骤,第二篇文章介绍了将JavaBean 注册成了一个beanDefinition。
2021-07-19 14:46:28
72
原创 手写Spring 初始化环境
本篇文章主要内容1.环境设计BeanFactory 和 ApplicationContext 的关系2.扫描Spring优先注册配置类原则即手动指定的配置类会优先扫描加载,看代码XxAnnotationConfigApplicationContext context = new XxAnnotationConfigApplicationContext(AppConfiguration.class);3.解析注册beanDefinition...
2021-07-19 11:32:43
138
原创 Java 虚拟机对象的分配
这篇文章我们主要看一看 HotSpot 虚拟机在Java堆中对象分配、布局、访问和回收的全过程。本文概念全部摘抄于周志明的《深入了解Java 虚拟机》1.Java 对象的创建Java 是一门面向对象的编程语言,Java 程序运行过程中每时每刻都有对象被创建出来。在语言层面上,创建对象通常仅仅是一个new 关键字而已,而在虚拟机中,对象的创建过程又是怎样的一个过程呢当Java 虚拟机遇到一条字节码new指令时,首先将去检查这个指令的参数是否能在常量池中定位一个类的符号引用,并且检查这个类的符号引用
2021-04-18 16:22:26
157
原创 Java 虚拟机执行引擎
执行引擎是Java 虚拟机核心的组成部分之一。“虚拟机” 是一个相对于 “物理机” 的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器,缓存,指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。在《Java 虚拟机规范》中制定了Java 虚拟机字节码执行引擎的概念模型,这个概念模型成为各大发行商的Java 虚拟机执行引擎的统一外观。在不同的虚拟机实现中,执行引擎在
2021-04-03 18:39:21
188
原创 走进Java 虚拟机
本文部分内容直接摘自 周志明的深入理解Java 虚拟机 第三版JVM是什么?百度百科解释:虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java 虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。本文主要内容就是从 Java 内存区域即 Java 虚拟机的运行时数据区域来走进Java虚拟
2021-03-28 22:36:00
148
原创 微服务架构:Spring-Cloud 组件与集群
Spring-Cloud项目的搭建因为spring-cloud是基于spring-boot项目来的,所以我们项目得是一个spring-boot项目,至于spring-boot项目, 这里我们先不讨论,这里要注意的一个点是spring-cloud的版本与spring-boot的版本要对应下图:spring-boot: <parent> <gro...
2020-03-16 00:41:04
337
原创 springbean的生命周期(上)
本篇主要介绍springbean的生命周期第一部分,每一部分的分层是按照BeanPostProcessor后置处理器来完成的。本篇完成内容为1.将需要进行aop代理的对象存放到集合中(已存在对象AppConfig.class 通过BeanFactoryPostProcessor 完成CGLIB增强) BeanPostProcessor#AnnotationAwareAspectJ...
2019-12-22 14:14:20
164
原创 Spring WebMVC零配置启动原理
首先我们看看Spring WebMVC官网介绍的第一句话Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. The formal name, “Spring Web...
2019-12-08 12:09:10
226
原创 Spring WebMVC执行Controller流程
第一篇了解到Spring Web MVC是在Servlet API上构建的原始Web框架。而核心处理器 DispatcherServlet 最终继承的父类 是 HttpServlet。所以所有请求都会进入doGet或者是doPost方法的调用链。我们看第一个概念 HandlerMapping 此处有两个这个应该在上一篇中介绍的 查找Handler(可以理解为对应的Control...
2019-12-08 11:39:18
537
原创 Spring WebMVC初始化Controller流程
此篇文章开始之前先向大家介绍一个接口InitializingBean这个接口的作用如果了解spring生命周期的应该知道 ,这个接口的作用就是在bean初始化之后会执行的init方法public interface InitializingBean { void afterPropertiesSet() throws Exception;}当然能实现这种方式的方法spr...
2019-12-08 11:38:29
1689
原创 2019年个人总结-Spring IOC初始化流程
只愿大浪淘沙,流逝不流它2019年个人总结Spring源码(继续)-Spring Web MVC源码(完成)-MyBatis源码(完成)2020年个人计划精通Spring源码 - Spring Boot 源码 - Spring Cloud 源码 - netty 源码首先说一下个人对spring容器(spring官网所有项目里面有一个项目叫spring springfr...
2019-12-04 13:35:15
332
原创 spring-ioc-容器初始化(下)
此篇介绍内容如下BeanDefinitionMap 的填充中 BeanFactoryPostProcessor(ConfigurationClassPostProcessor)做了什么1.子类的扫描解析注解(递归思想循环解析) 2.父类的cglib代理我们先来看看环境图在进入解析之前会介绍一下这三个类ConfigurationClassUtils,Confi...
2019-12-01 12:45:35
170
原创 spring-ioc-容器初始化(上)
太阳每天都是新的,你是否每天都在努力。本文会涉及到三个方面1.BeanDefinition2.BeanFactoryPostProcessor(ConfigurationClassPostProcessor)3.BeanDefinitionMap的填充-->BeanDefinitionMap.put(beanName,BeanDefinition);我们先来了解官网对...
2019-11-30 00:49:35
202
原创 spring-ioc-推断构造函数-自动装配
关于自动装配的推断构造函数中,它会在众多构造方法中推断出一个最合理的方法,那这个方法有什么特点呢。由于本文演示所涉及的构造方法参数个数都是相同的,所以答案是该参数个数最多,并且存在于ioc容器中的那个方法就是最佳的,有兴趣的朋友可以去试一试,但如果是相同个数构造方法,spring是如何去进行推断的呢,我们一起来看看吧。关于手动装配推断构造方法如果在多个构造方法中加上@Autowired(...
2019-11-24 16:06:36
888
原创 spring-ioc-推断构造函数-手动装配
耀眼的星星并不是最高的此篇文章我们来介绍spring ioc的精髓之一,如何推断构造函数,分为手动装配和自动装配两部分进入源码。我们知道spring bean的生命周期中是先初始化对象再来装配属性,那么我们就从上文的构造方法循环依赖返回的对象作为入口。本次的测试环境为package org.springframework.waf.entity;import org...
2019-11-23 15:44:07
478
原创 spring-ioc-循环依赖
spring-ioc的循环依赖,环境如下我们测试3个对象循环依赖<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"...
2019-11-17 00:30:17
364
原创 spring-ioc-自动装配
本篇博客主要为spring专栏的spring-ioc 核心之springbean的装配错误纠正https://blog.csdn.net/qq_38108719/article/details/99674379纠正如下@Autowired和@Resource不属于自动装配模型中的任意一种。本篇博客会有所涉及,后期会有源码验证有兴趣的朋友可以看一下spring的内置处理器其中的有两个是专...
2019-11-14 10:40:01
309
原创 spring的介绍
spring是什么,谈谈你对spring的理解。我们项目中引入的spring框架其实是属于spring官网中的一个项目之一叫spring-framework。我们先看下spring官网。spring.io这里包含了spring所有的项目而我们通常认为的spring框架就是spring framework,我们再点进去看看spring框架所有的特征也就是所包含的模块,...
2019-11-13 16:16:01
133
原创 spring 核心后置处理器-BeanDefinitionRegistryPostProcessor
前面文章中介绍过几种将object->bean的方式那么我们这个后置处理器一样可以实现,我们看代码public class User { public User(){ System.out.println("init-user"); };}@Componentpublic class TestBeanDefinitionRegistryPostProcessor ...
2019-09-07 11:55:11
299
原创 spring 核心后置处理器-ConfigurationClassPostProcessor
此篇博客由于能力有限,虽然有些讲不全,希望对你有所帮助。先看下该处理器的继承图吧这个工具类中有两个很重要的属性org.springframework.context.annotation.ConfigurationClassUtils private static final String CONFIGURATION_CLASS_FULL = "full"; private s...
2019-09-07 11:11:21
521
1
原创 spring bean的后置处理器-BeanPostProcessor
spring的后置处理器有很多,其中有一个后置处理器可以在bean初始化中对其进行一定的影响。我们下面来看看接上文的Teacher类@Component@Scope("singleton")//加与不加,spring默认是注册单例beanpublic class Teacher{ public Teacher(){ System.out.println("Construct...
2019-09-07 10:20:03
215
原创 spring beanFactory后置处理器-BeanFactoryPostProcessor
spring-BeanFactoryPostProcessor有什么功能呢。他能改变bean在实例化之前的一些原注解值,比如单例变原型,手动减轻BeanFactory的工作压力。原注解是指spring默认为bean装配的注解比如:@Scope,@lazy,@Primary,@DependsOn,@Role,@Description直接看代码定义一个单例bean@Componen...
2019-09-07 09:59:45
311
原创 spring-ioc如何将一个接口变成springbean
interface-->proxy object-->springbean首先确定的是将一个接口变成一个对象,JDK动态代理再合适不过,但是将代理对象交给spring管理该怎么做呢?我们将一个对象交给spring管理有哪些方式呢?BeanFactory,FactoryBean,ImportSelector,工厂方法(xml配置 factory-method="createO...
2019-09-04 15:22:49
2008
原创 spring-aop前篇之代理模式-JDK动态代理
弥补静态代理会产生类爆炸的缺点,动态代理营运而生。JDK动态代理只能代理接口(因为动态代理生成的代理类已经继承了Proxy,所以只能代理接口)实现JDK动态代理有哪些步骤呢1,新建一个接口并新建其实现类(JDK动态代理中称之为目标对象即targetObject)2,新建代理类实现InvocationHandler接口重写invoke方法先上个简单的图,不喜勿喷下面请看代码演...
2019-08-21 23:06:37
151
原创 spring-aop前篇之代理模式-静态代理
代理对象(proxy) 增强后的对象目标对象(target) 被增强的对象1.静态代理(继承和聚合) 继承:代理对象继承目标对象,重写需要增强的方法;缺点:会代理类过多,非常复杂 聚合:目标对象和代理对象实现同一个接口,代理对象当中要包含目标对象。缺点:也会产生类爆炸,只不过比 继承少一点点总结:如果在不确定的情况下,尽量不要去使用...
2019-08-20 15:19:05
129
原创 spring-ioc 核心之springbean的装配
spring-ioc装配文章分文手动配置依赖(setter方法注入和构造函数注入)和byType及byName查找依赖首先第一个手动配置依赖利用ClassPathXmlApplicationContext这个对象,非常普通的bean标签setter方法注入和构造函数注入 <bean id="dao1" class="org.springframework.test.main....
2019-08-16 11:16:11
169
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人