![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Spring源码
文章平均质量分 92
柳擎
苦行修士
展开
-
Spring Boot整合RabbitMQ及源码解析
bb原创 2021-07-05 14:08:32 · 1570 阅读 · 4 评论 -
Spring Boot 集成mybatis 源码解析
Spring Boot项目中集成mybatis来开发项目,我相信每个用Spring boot 的小伙伴都使用过,感觉就是特别爽,在yml文件中配置一下,就能对数据库进行访问了,其实现原理是什么呢?带着疑问,我们走进代码。在pom.xml文件中新增配置<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-start原创 2021-06-24 12:28:31 · 804 阅读 · 1 评论 -
Spring @Bean @Scope注解 proxyMode的组合使用及源码解析
Spring 项目中,我们生产很少使用Scope注解,对于proxyMode模式,那就更少去使用了,但我在研究Conguration注解下@Bean注解配置的方法时,遇到了@Bean注解和@Scope注解的proxyMode模式叠加使用,其中proxyMode模式,让我有点困惑。因此写下这篇博客记录下来,以便如果以后,认知更加丰富时,再回头补充这篇博客。先来看一个例子。public class ScopedProxyModeA { public void aaaaaa(){原创 2021-06-22 17:23:10 · 1223 阅读 · 0 评论 -
Spring源码深度解析(郝佳)-Spring 常用注解使用及源码解析
我们在看Spring Boot源码时,经常会看到一些配置类中使用了注解,本身配置类的逻辑就比较复杂了,再加上一些注解在里面,让我们阅读源码更加难解释了,因此,这篇博客主要对配置类上的一些注解的使用以及实现原理做分析,从而让阅读源码更加简单一点。 Spring boot 集成mybatis时,就有一个非常重要的配置类MybatisAutoConfiguration,这个类上配置了一堆注解,如下@org.springframework.context.annotation.Configuration原创 2021-06-18 15:16:42 · 1067 阅读 · 1 评论 -
Spring源码深度解析(郝佳)-学习-Spring消息-整合RabbitMQ及源码解析
rabbitMQ生产者配置文件。 配置文件是Spring的核心,Spring整合消息服务的使用也是从文件配置开始的,类似于数据库操作,Spring也将RabbitMQ中的操作封装到RabbitTemlate中,以方便我们统一使用,所以Spring的核心配置文件中首先要注册的是RabbitTemplate类型的bean<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org.原创 2021-06-03 19:06:47 · 1491 阅读 · 4 评论 -
Spring源码深度解析(郝佳)-学习-HttpInvoker使用及源码解析
Spring开发小组意识到在RMI服务和基于HTTP的服务如(Hessian和Burlap)之间的空白,一方面,RMI使用Java标准对象序列化,很难穿越防火墙,另一方面,Hessian/Burlap能很好的穿过防火墙工作,但是使用自己的私有的一套磁序列化机制。 就这样,Spring的HttpInvoker应运而生,HttpInvoker是一个新的远程调用模型,作为Spring框架的一部分,来执行基于HTTP的远程调用(让防火墙高兴的事情),并使用Java序列化机制 (让程序员高兴的事情)。 我原创 2021-04-22 17:39:25 · 584 阅读 · 0 评论 -
Spring源码深度解析(郝佳)-学习-RMI使用及Spring源码解读
java远程方法调用。原创 2021-04-21 17:53:30 · 390 阅读 · 0 评论 -
Spring源码深度解析(郝佳)-学习-jdk代理-cglib代理
在java中目前主要使用的是jdk代理和cglib代理,这两种代理是Spring AOP的精髓所在,不过在理解Spring AOP之前,先来看看这两种代理的使用。jdk代理使用示例创建业务接口,业务对外提供了接口,包含着业务可以对象提供的功能。public interface UserService { // 目标方法 public abstract void add();}创建原创 2021-04-15 20:29:31 · 237 阅读 · 0 评论 -
Spring MVC源码解析(三)-方法参数解析器
我们在之前的博客中己经分析了 Spring MVC 的大体结构,以及 Spring MVC 的 Controller是如何封装成 Handler以及根据 URL 获取如何查找 Handler,今天,我们继续来分析 Spring MVC的另一个细节,Controller 方法中的请求参数是如何注入的。那我们先来看一个例子。1. 创建controller//处理登录请求的后端控制器//注意:@RequestPa原创 2021-01-15 11:49:02 · 620 阅读 · 1 评论 -
Spring源码深度解析(郝佳)-学习-源码解析-Spring MVC(三)-Controller 解析
在之前的博客中Spring源码深度解析(郝佳)-学习-源码解析-Spring MVC(一),己经对 Spring MVC 的框架做了详细的分析,但是有一个问题,发现举的例子不常用,因为我们在实际开发项目的过程中,肯定不会自己去配置url 和 handler之间的关系,也肯定不会用ModelAndView来返回视图对象,基于上篇博客最后的问题,今天,我们来研究在企业是如何使用 Spring MVC的,当然,互联网的原创 2021-01-06 11:07:52 · 526 阅读 · 0 评论 -
Spring源码深度解析(郝佳)-学习-源码解析-Spring MVC(二)-异步请求
bb bb原创 2020-12-31 20:13:14 · 99 阅读 · 0 评论 -
Spring源码深度解析(郝佳)-学习-源码解析-Spring MVC(一)
Spring框架提供了构建Web应用程序的全部功能MVC模块,通过策略接口,Spring框架是高度可配置的,而且支持多种视图技术,例如JavaServer Pages(JSP),Velocity,Tiles,IText和POI,Spring MVC框架并不知道使用的视图,所以不会强迫您只使用JSP技术,Spring MVC分离了控制器,模型对象,分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。&nb原创 2020-12-30 17:53:18 · 614 阅读 · 2 评论 -
Spring源码深度解析(郝佳)-学习-源码解析-Spring事务源码解析
Spring声明式事务让我们从复杂的事务处理中得到解脱,使我们再也不需要去处理获取的连接,关闭连接,事务提交和回滚操作,再也不需要在与事务相关的方法中处理大量的try…catch…finally代码,Spring中事务的使用虽然己经相对简单得多,但是,还是有很多的使用及配置规则,有兴趣的读者可以自己查阅相关资料进行深入研究,这里只列出最常用的用法。 &n原创 2020-12-24 13:14:55 · 859 阅读 · 0 评论 -
Spring源码深度解析(郝佳)-学习-源码解析-Spring整合MyBatis
xxx原创 2020-12-16 18:03:19 · 223 阅读 · 0 评论 -
Spring源码深度解析(郝佳)-学习-源码解析-数据库连接JDBC
JDBC(Java Data Base Connectivity, Java 数据库连接),是一种用于执行 SQL语句的 JAVA API,可以为多种关系数据库提供统一访问,它由一组用 Java 语言编写的类和接口组成,JDBC为数据库开发提供了一个标准的API,据此可以构建理高级的工具和接口,使数据库开发人员能够用纯JAVA API编写数据库应用程序,并且可跨平台运行,并且不受数据库供应商的限制。原创 2020-11-19 12:40:03 · 505 阅读 · 0 评论 -
Spring源码深度解析(郝佳)-学习-源码解析-创建AOP静态代理实现(八)
继上一篇博客,我们继续来分析下面示例的 Spring 源码实现。PreGreetingAspect.java@Aspectpublic class PreGreetingAspect { @Before("execution(* com.spring_1_100.test_91_100.test97_ltw.*.*(..))") public void beforeGreeting() {原创 2020-11-17 20:24:50 · 1230 阅读 · 0 评论 -
Spring源码深度解析(郝佳)-学习-源码解析-创建AOP静态代理(七)
加载时织入(Load-Time Weaving ,LTW) 指的是在虚拟机加载入字节码文件时动态织入Aspect切面,Spring框架的值添加为 AspectJ LTW在动态织入过程中提供了更细粒度的控制,使用 Java(5+)的代理能使用一个叫"Vanilla" 的 AspectJ LTW,还需要在启动 JVM 的时候将某个 JVM 参数设置打开,这种 JVM范围的设置在一些情况下或者不错,但通常情况下显得有些原创 2020-11-10 13:25:47 · 852 阅读 · 1 评论 -
Spring源码深度解析(郝佳)-学习-源码解析-aop基于cglib代理调用实现(六)
xxx原创 2020-11-05 18:59:34 · 377 阅读 · 0 评论 -
Spring源码深度解析(郝佳)-学习-源码解析-aop代理创建(五)
前面几篇博客中己经对切面表达式的解析,匹配己经做过详细的介绍了,今天我们来研究一下,当表达式和目标类方法匹配成功以后,又是如何创建代理的呢?今天,我们将围绕这个话题,再次来研究。先上示例。AspectJTest@Aspect@Configurationpublic class AspectJTest { @Before("execution(* com.spring_101_200.test_111_120.test_117_excution.excution1.*.*(..))")原创 2020-11-03 12:58:36 · 410 阅读 · 1 评论 -
Spring源码深度解析(郝佳)-学习-源码解析-aop切面表达式匹配(四)
经过aop切面表达式解析(一)和aop切面表达式解析(二)分析,我们己经知道表达式解析成相应和 PatternPointcut,就如下例中,切面表达式execution(* com.spring_101_200.test_111_120.test_117_excution.excution1..(…))是如何匹配到MyService类中的service方法的呢?带着疑问,我们今天来继续跟进源码。AspectJTest@Aspect@Configurationpublic class AspectJT原创 2020-10-30 10:43:11 · 420 阅读 · 0 评论 -
Spring源码深度解析(郝佳)-学习-源码解析-aop切面表达式解析(三)
AspectjParentParent.javapublic class AspectjParentParent { @Pointcut("execution(* com..MySer*.*(..))") public void test() { }}AspectjParent.javapublic class AspectjParent extends AspectjParentParent原创 2020-10-28 20:38:55 · 499 阅读 · 0 评论 -
Spring源码深度解析(郝佳)-学习-源码解析-aop切面表达式解析(二)
TestBean.java@Servicepublic class TestBean { public void test() { System.out.println("test"); }}AspectJTest.java@Aspect@Configurationpublic class AspectJTest { @Pointcut("execution(* com.spring_1_100.test_61_70.test64.*.*(..))"原创 2020-10-28 10:48:05 · 306 阅读 · 1 评论 -
Spring源码深度解析(郝佳)-学习-源码解析-基于注解切面解析(一)
本文的github地址是https://github.com/quyixiao/spring_tiny/tree/master/src/main/java/com/spring_1_100/test_61_70/test64原创 2020-10-18 13:54:30 · 393 阅读 · 0 评论 -
Spring源码深度解析(郝佳)-学习-源码解析-@AliasFor标签
在研究Spring源码关于注解解析时,发现有源码中有很大的篇幅在处理关于AliasFor标签。我在网上找了一下,发现Spring中的@AliasFor标签 这篇博客对@AliasFor的使用己经介绍得很详细了,只是对源码的具体处理方面,我觉得,如果不是研究过源码的同学,可能还是觉得镜花水月,因此,今天,对其中的一个具体的示例做一下分析,希望对大家有用,先上示例吧AliasFor.java@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.MET原创 2020-10-17 01:33:02 · 458 阅读 · 0 评论 -
Spring源码深度解析(郝佳)-学习-源码解析-基于注解注入(二)
在Spring源码深度解析(郝佳)-学习-源码解析-基于注解bean解析(一)博客中,己经对有注解的类进行了解析,得到了BeanDefinition,但是我们看到属性并没有封装到BeanDefinition(关于BeanDefinition的定义,这里不做过多的解释了,就是定义了Bean的属性,比如单例,多例,依赖,工厂方法,是否使用代理,等,而Bean的创建,是基于Bean的定义来的)中,而Bean创建的时候,是如何注入的呢?今天,我们带着这个问题,继续来跟踪基于注解的属性是如何注入。先上示例。Car原创 2020-10-15 12:12:41 · 405 阅读 · 0 评论 -
Spring源码深度解析(郝佳)-学习-源码解析-基于注解bean定义(一)
xxxxxxxxxxxx原创 2020-10-14 18:35:24 · 465 阅读 · 0 评论 -
Spring源码深度解析(郝佳)-学习-ASM 类字节码解析
我们在Java字节码文件结构剖析(二)中己经对MyTest35_1这个类的字节码做了完整的解析,今天,我们来看看Spring的ASM技术是如何来解析Java类字节码的。话不多说,先上实例。MyTest35_1.javapackage com.spring_1_100.test_31_40.test35_resource_inject;public class MyTest35_1 { String str = "Welcome"; private int x = 5; pri原创 2020-10-13 18:42:27 · 709 阅读 · 1 评论 -
Spring源码深度解析(郝佳)-学习-源码解析-import标签
Boss.java@Datapublic class Boss { private Car car;}Car.java@Datapublic class Car { private Long id ; private String brand; private int maxSpeed;}spring30_child.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http原创 2020-10-05 15:26:48 · 146 阅读 · 1 评论 -
Spring源码深度解析(郝佳)-学习-源码解析-idref标签
vvv原创 2020-10-05 13:54:14 · 131 阅读 · 0 评论 -
Spring源码深度解析(郝佳)-学习-源码解析-abstract-bean
月 e原创 2020-10-05 13:36:02 · 234 阅读 · 0 评论 -
Spring源码深度解析(郝佳)-学习-循环依赖-(构造器-setter)源码分析
循环依赖分为构造器循环依赖,以及 setter 循环依赖。下面我们来举例两种循环依赖的具体实例,再来分析源码 。1.构造器循环依赖 表示通过构造器注入构成的循环依赖,此依赖是无法解决的,只能抛出 BeanCurrentlyIn-CreationException 异常表示循环依赖。 如在创建 TestA类时,构造器需原创 2020-10-01 10:37:36 · 411 阅读 · 0 评论 -
Spring源码深度解析(郝佳)-学习-FactoryBean 使用及源码解析
dsds原创 2020-09-30 10:28:17 · 224 阅读 · 0 评论 -
Spring源码深度解析(郝佳)-学习-源码解析-自定义标签解析
自定义标签使用在使用情况下,我们需要为系统提供可配置化支持,简单的做法可以直接基于 Spring 的标准 bean 来配置,但配置较为复杂或者需要更多的丰富的控制的时候,会显得非常的笨拙,一般的做法会用原生态的方式去解析定义好的 xml文件,然后转换为配置对象,这种方式当然可以解决所有的问题,但实现起来非常繁琐,特别是配置非常复杂的时候,解析工作是不个不得不都试的负担,Spring提供了可扩展 Schema 的支持,这是一个非常不错的折中方案,扩展 Spring 自定义标签配置大致需要以下的几个步骤(前提原创 2020-09-29 00:29:30 · 150 阅读 · 0 评论 -
Spring源码深度解析(郝佳)-学习-源码解析-factory-method
本文要解析的是Spring factory-method是如何来实现的,话不多说,示例先上来。Stu.javapublic class Stu { public String stuId; public Stu(String stuId) { this.stuId = stuId; }}StuFactory.javapublic class StuFactory { //动态创建类 public Stu getDynamicStu(Stri原创 2020-09-28 15:57:09 · 531 阅读 · 0 评论 -
Spring源码深度解析(郝佳)-学习-源码解析(二)-自定义ConversionService
本文主要想要说明的是如何自定义类型转换器我们先来做一个测试User.java@Datapublic class User { private Date birth;}spring114.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/原创 2020-09-27 18:09:22 · 452 阅读 · 0 评论 -
Spring源码深度解析(郝佳)-学习-数据转换-ConversionService源码解析一
为什么我们在xml配置的对象引用,Spring会帮我们实例化呢?为什么在xml配置的是一个字符串,Spring 却能帮我们转化成java对象中申明的属性类型呢?在比较新的Spring版本中与ConversionService有关,Spring 3.0 之前和PropertyEditor这个类相关,有兴趣的同学可以自行研究一下。今天,我们就来研究一下源码,Spring 是如何进行数据转换的。先上示例User.java@Datapublic class User { private Strin原创 2020-09-26 16:06:50 · 527 阅读 · 0 评论 -
Spring源码深度解析(郝佳)-学习-Spel源码解析(三)-Math
今天来讲讲对于Math函数的Spel分析@Testpublic void test2() { ExpressionParser parser = new SpelExpressionParser(); String randomPhrase = parser.parseExpression( "random number is #{T(java.lang.Math).round(30d)}", new TemplateParserConte原创 2020-09-18 15:15:35 · 1209 阅读 · 0 评论 -
Spring源码深度解析(郝佳)-学习-Spel源码解析(二)-String计算
之前的博客中解析了(21 + 3 ) * 4 是如何计算来的,今天来看一下字符串的拼接解析。直接上代码。本文的github地址是https://github.com/quyixiao/spring_tiny/blob/master/src/main/java/com/spring_101_200/test_111_120/test_113_conversion/spel/TestSpel.java...原创 2020-09-17 18:27:28 · 759 阅读 · 0 评论 -
Spring源码深度解析(郝佳)-学习-Spel源码解析(一)-运算符计算
本文的github地址是https://github.com/quyixiao/spring_tiny/blob/master/src/main/java/com/spring_101_200/test_111_120/test_113_conversion/spel/TestSpel.java原创 2020-09-16 18:54:45 · 1514 阅读 · 0 评论 -
Spring源码深度解析(郝佳)-学习-测试,线上环境区分源码分析
本文主要是想说明Spring 中如何区分线上线下环境,并且源码中是如何实现的。User.java@Datapublic class User { private String username; private Integer age; public User() { } public User(String username, Integer age) { this.username = username; this.age =原创 2020-09-14 00:24:27 · 356 阅读 · 0 评论