自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 MyBatis核心源码解析(三)

​MyBatis核心源码解析(三)在前面两章,我们对MyBatis的核心源码做了深度分析,可以看到MyBatis其实对于Spring来说就变得不那么复杂,本章将会介绍Spring-MyBatis剩余的部分内容,在前面Spring的章节,笔者写过一章Spring-MyBatis,其中就核心介绍了Spring的扩展功能和MapperFactoryBean这个类,也介绍了它的核心设计思想,重点介绍了如何将代理对象交给Spring管理,那么本章就对Spring-MyBatis其他重要的点进行详细说明。.

2021-01-18 09:31:12 175 2

原创 MyBatis核心源码解析(二)

MyBatis核心源码解析(二)​在MyBatis核心源码解析(一)中,我们对MyBatis的第一种调用源码做了深度分析,现在我们就开始介绍第二种情况import com.User;import com.UserMapper;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;.

2021-01-18 09:30:17 130

原创 MyBatis核心源码解析(一)

​MyBatis核心源码解析(一)在前段时间,我们通过二十多个章节对SpringFramework的部分内容做了深度分析,并对核心部分的源码做了详细介绍,本章开始将对MyBatis的核心源码做深度分析,MyBatis学习将分为几个阶段,一是MyBatis单独源码做分析,二是对MyBatis扩展做分析,三是Spring整合MyBatis做分析,但是笔者在Spring的章节为了让大家能够理解Spring拓展的特性,已经对Spring整合MyBatis的核心设计思想做了深入的分析,因此有部分内容会简要介.

2021-01-18 09:28:51 244

原创 Spring是如何解析有参构造器的?

​Spring是如何解析有参构造器的?在前面的章节,笔者对SpringIOC的源码做了详细的介绍,但跳过了一个地方,因为通常情况下,我们的对象是只会包含默认的构造器,不会采用有参构造器,而且就算是有参构造器也都停留在XML的阶段里,因此笔者直接将特殊的情况直接跳过了,一来是Spring在处理有参构造器时较为复杂,笔者本来是不打算介绍的,但考虑到如果读者有好奇心想要去深入了解,因此笔者在这里对SpringIOC的源码在做一些补充吧。提示:对于本章的学习,读者一定要熟悉SpringIOC的源码,不然会.

2021-01-06 14:27:37 1223

原创 SpringBoot自动装配核心原理(下)

@SpringBootApplication核心原理(下)在上个章节中,我们提到了@SpringBootApplication核心原理中十分重要的注解@ConditionalOnClass,解释了SpringBoot实现自动装配的关键步骤,其次对核心源码也做了简要介绍,本章将对SpringBoot外部化配置做详细说明。首先回到上个章节,笔者提出的问题,很多时候我们引入的组件都是需要我们用户自定义的,比如数据库连接、ip、端口,这些是没有办法确定的,但是这些类却需要自动配置到SpringBoot.

2020-12-25 09:24:18 106

原创 SpringBoot自动装配核心原理(中)

@SpringBootApplication核心原理(中)​在上一章节,我们对@SpringBootApplication核心原理的一些核心设计做了简要分析,并对SpringBoot如何实现自动装配的设计做了简要说明,本章将继续对@SpringBootApplication的核心原理做详细介绍,并会对一部分源码做简要介绍,回到上个章节,笔者提出的问题:我们可以看到这里面有很多的配置信息,那么我们是所有的东西都要添加吗?答案肯定是否定的,因为如果所有的东西都直接用上,这会导致SpringBoot包含的

2020-12-25 09:23:21 275

原创 SpringBoot自动装配核心原理(上)

​@SpringBootApplication核心原理(上)在前面的章节里,笔者对Spring的核心内容做了比较详细的介绍,本章将对SpringBoot的自动化配置的核心原理进行详细介绍,在介绍本章内容之前,读者应该了解一些关于Spring的重点知识,包含@Import注解,ImportSelector接口,以及ImportBeanDefinitionRegistrar,这三个Spring拓展方式笔者在前面的章节做了详细的分析,并对源码也做了较为深入的分析,如果读者不清楚这部分内容的,不建议看本篇.

2020-12-25 09:22:16 269 1

原创 如何自定义@autowired注解?

​如何基于Spring自定义依赖注入注解?在上一章节,我们分享了@Autowire注解方式的原理以及源码,对AutowiredAnnotationBeanPostProcessor这个类的核心方法做了深入分析,本章将对自定义属性注入进行详细分析。首先我们还是看到这个类AutowiredAnnotationBeanPostProcessor:public AutowiredAnnotationBeanPostProcessor() { this.autowiredAnnotati...

2020-12-25 09:21:19 756

原创 @Autowired 是通过类型查找还是通过属性名查找?

​@Autowired 是通过类型查找还是通过属性名查找? 前面笔者对@Autowired 的一些重难点做了深入的了解,并对一些关键源码做了深入分析,本节将对@Autowired 的注入方式做详细介绍。 还是先从案例分析看起:一个User接口public interface User {​}​两个User实现类@Componentpublic class User2 implements User{​}​@Componentpublic class User1 i...

2020-12-25 09:19:34 1611

原创 @Autowire注入集合类方式深入解析

​@Autowire依赖注入集合类注入方式相信大家对@Autowire的使用并不陌生,这里就不对它做太多介绍,本章核心将对@Autowire如何处理集合类方式做深入探讨,首先创建两个user类实现user接口,然后再写一个集合封装类好了,最后写一个测试类查看测试结果:通过结果,我们可以看到@Autowire将我们实现User接口的所有类都进存放在集合中,存放的类型既有Map类型的方式,也有List的方式。@Autowire注入集合类方式源码解析在Defa.

2020-08-08 17:14:29 573

原创 某大厂面试:Spring为什么用三级缓存解决循环依赖?

Spring 在 Bean 创建过程中是如何解决循环依赖的?其实循环依赖笔者在Spring源码的章节就进行了详细的介绍,这里单独提出来是为了方便觉得源码章节过于复杂又没有时间看的小伙伴们如果想要了解循环依赖的设计,毕竟循环依赖也是面试的常见题型。面试官:你了解循环依赖吗?我:循环依赖就是在Spring容器中,两个对象相互依赖造成死循环的问题,举个例子,假如我们有两个对象一个是User1,一个是User2,User1类里面有一个属性来自于User2,User2类有一个属性来自于U.

2020-08-05 14:16:43 1858

原创 面试管:你知道BeanFactory和ApplicationContext的区别吗?

​BeanFactory和ApplicationContext的区别面试官:你知道BeanFactory和ApplicationContext到底有什么区别吗?面试者:1、BeanFactory:是Spring里面最低层的接口,提供了最简单的容器的功能,只提供了实例化对象和获取对象的功能;// 仅保留重接口,删除了一些重载接口public interface BeanFactory {​ String FACTORY_BEAN_PREFIX = "&"; O.

2020-08-02 10:05:49 457

原创 ​@Autowired注解能用在static属性吗?

​@Autowired注解能用在static属性吗?答案是否定的,我们来测试下:日志信息已经很明确了,表示static不能被@Autowired进行复制。为什么呢?我们现在就来一起了解其原因。首先将我们的测试环境搭建好,User1类@Componentpublic class User1 {​ @Autowired​ private static User2 user2;​ @Autowired private User2 user3;​​}..

2020-08-02 10:02:41 1000

原创 Spring环境是什么、Spring容器又是什么?

Spring环境是什么、Spring容器又是什么?在前面十多个章节我们对Spring的核心源码设计做了详细的介绍,其中包含Spring IOC、Spring AOP、数据转换、Spring-Mybatis等等,从本章开始笔者将通过常见的面试题型对Spring的剩余部分做嵌套分析。Spring容器是什么?看过笔者前面章节的小伙伴们一定知道,笔者提到过一个接口BeanFactory,我们回顾一下public interface BeanFactory { String FACTOR.

2020-07-28 11:41:46 406

原创 SpringBoot是如何内置tomcat且整合Spring的?

pringBoot是如何内置的Tomcat?在SpringBoot之前,可能读者在接触Spring、SpringMVC等框架的web项目都会涉及到一个web.xml,这在笔者SpringMVC源码解析的文章中也是采用的这种方式,为了将我们的DispatcherServlet注册进来,我们会在web.xml里面添加一些东西,如下:<servlet> <servlet-name>SpringMVC</servlet-name> .

2020-07-27 20:39:57 4330 12

原创 Spring为什么出现BeanWrapper

回顾在前面几个章节,我们谈到SpringMVC参数绑定原理,以及javaBeans提供的数据绑定、数据转换PropertyEditor以及Spring提供的Converter转换器,或许读者有些疑问,为什么我们花了这么多精力去了解数据绑定、数据转换这类知识,今天我们就来了解Spring内部在哪里应用到了内建的数据处理,(这里并非指的是SpringMVC参数绑定)BeanWrapperpublic interface BeanWrapper extends ConfigurablePropert

2020-07-27 20:23:01 480

原创 PropertyEditor和Converter有什么区别

PropertyEditor自定义实现在上一章节对数据绑定底层做了详细分析,其中就对提到数据绑定就是基于PropertyEditor作为数据转换的工具来实现绑定关系的协调作用,本章将对PropertyEditor注册以及结合Spring如何自定义PropertyEditor。PropertyEditor注册首先回到IDEA手,首先我们回到PropertyEditor接口找到他的子类PropertyEditorSupport,这其实是java.beans的一个实现,里面有get和...

2020-07-27 20:02:23 777

原创 数据绑定底层设计

数据转换(一)在上一章节,我们对SpringMVC参数绑定原理做了详细分析,并介绍了数据绑定的例子及部分源码,本章将深入介绍数据绑定的底层实现及数据转换核心设计。数据绑定底层设计首先我们回到上个章节介绍的Demo@Controllerpublic class UserController { private String name; private Long id; private int age; public String getN.

2020-07-22 16:03:43 185

原创 SpringMVC参数绑定机制

在上一章节,笔者对SpringMVC核心源码做了详细分析,并提出了一个比较关键的问题,SpringMVC如何将客户端的(key-value)数据和映射方法的参数进行绑定,本章通过由浅至深的方式一起和读者了解数据绑定的相关信息。首先还是回到我们的实例:简单介绍下,这是上篇文章使用的案例,只是我们添加了一个参数Integer id,然后我们在url链接上加上了?id=123,注意这个id=xxx是字符的形式,也就是说,SpringMVC将字符形式的id=123转换成了Integer形式,下面我们

2020-07-17 10:03:13 304

原创 SpringMVC核心源码解析(二)

​上一章节笔者对SpringMVC的核心原理做了详细介绍,本章将结合源码的方式对SpringMVC的原理进行解析,在上个章节笔者提到了一个Spring核心类DispatcherServlet类,我们先看下这个类的继承关系该类如笔者所说继承了我们的HttpServelt,如果我们实现HttpServelt的doGet()方法或者doPost(),那么我们根据映射关系可以将方法和url进行绑定,对于HttpServelt之上的内容,笔者不进行描述,因为这是Tomcat的知识,那么现在我们的核心关键就是回

2020-07-17 10:00:23 206

原创 SpringMVC核心源码解析(一)

​SpringMVC源码解析(一)传统的web编程在了解SpringMVC源码之前,我们需先关注SpringMVC解决了什么问题,在原来的web编程中,我们会基于servlet实现web编程,我们简单回顾下,首先新建一个类实现HttpServletpublic class MyHttpServlet extends HttpServlet {​ @Override protected void doPost(HttpServletRequest req, HttpServle

2020-07-17 09:53:23 407

原创 Spring AOP核心源码解析

Spring AOP在上一章节,笔者对Spring-Mybatis的核心思想做了详细介绍,目的是让读者能够更加清晰的认知Spring的全局生命周期,以及Spring是如何设计对外扩展的开放,本章将对Spring AOP的原理及源码进行详细说明。Spring AOP应用首先还是对Spring AOP的基本功能简单介绍。切面配置类被增强的类配置类新建一个测试类image输出结果:通过执行结果我们可以看到我们不需要修改任何原有的代码就可以改变代码的逻辑.

2020-07-08 14:00:07 287

原创 Spring-Mybatis核心源码解析

Spring-Mybatis核心思想经过漫长的学习,我们总算对Spring IOC 和DI的整体流程有了一定的认识, 可能读者读完之后并不觉得Spring的设计有多牛逼,甚至觉得Spring的设计过于复杂,那么本章的内容将会让大家大开眼界,震撼大家如此的想法,但前提是对笔者的前面所提及的内容、Spring的主干一定要熟悉。Spring如何实现对外拓展在Spring源码的第五章,笔者提到了Import注解,不知大家是否还有印象,如果没有印象请读者自行回顾IOC的知识,因为笔者这里将重点介绍Spri

2020-07-08 14:00:00 257

原创 Spring核心源码(四)对象实例化和对象初始化

### **​Spring 创建对象**在上一章我们对invokeBeanFactoryPostProcessors的重要部分进行了详细的介绍,总算到了我们的Spring创建对象的过程了,本章会接着前面的refresh进行续写。### **registerBeanPostProcessors(beanFactory)**这个方法的特性和invokeBeanFactoryPostProcessors(beanFactory);其实差不太多,也是对后置处理器的一些操作,但这个方法的重量缺少了很多,相

2020-07-08 13:59:49 585

原创 Spring核心源码(三)@Configuration注解设计思想

### **​invokeBeanFactoryPostProcessors(下)**在上一小节我们分析完了invokeBeanDefinitionRegistryPostProcessors(currentRegistryProcessors, registry);这个方法干了那些事情,现在我们继续对后文做分析,如图:![image](https://upload-images.jianshu.io/upload_images/23961345-92902483d3a346b5?imageMogr2/

2020-07-08 13:59:40 265

原创 Spring核心源码(二)类解析处理

### **invokeBeanFactoryPostProcessors(上)**```protected void invokeBeanFactoryPostProcessors(ConfigurableListableBeanFactory beanFactory) { //这里的参数getBeanFactoryPostProcessors()讲道理很容易误导大家,我在调试的时候发现它什么都没返回,注意他们的区别,list和map //回到之前我所以提到的实现了BeanFact...

2020-07-08 13:59:25 320

原创 Spring核心源码(一) 初始Spring源码

### **Spring 源码测试实例**一个注解配置类,在com包里有一个User接口,两个实现了User接口的方法(提示:从本章开始,建议读者边看边实操)![image](https://upload-images.jianshu.io/upload_images/23961345-a100e0499092a64a?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)测试类,笔者将以AnnotationConfigApplicationCont

2020-07-08 13:59:17 676

原创 Spring核心应用

Spring 基本应用目前,几乎所有java项目都会涉及到Spring,乃至后面的SpringBoot,SpringCloud也逐步占据市场,可见Spring的技术生态在Java的领域是多么的重要,那么就让我们来了解Spring到底为我们解决了那些问题呢。在Spring官网提出,Spring核心提供依赖注入、事件、数据源、AOP等功能,相信做过java开发的对Spring应用都比较熟悉,这里就不对Spring的应用做大量篇幅,只最常用的特性举例。Spring IOC DI新建两个User

2020-07-08 13:59:09 206

原创 Spring5学习心得及源码编译

前言相信只要是接触过java开发的小伙伴们一定都接触过Spring框架,并且出于面试的热点,相信大部分小伙伴对Spring的原理多多少少都会有一些了解,但对Spring的底层设计却是敬而远之,本文将和大家分享笔者对Spring的一些核心设计思想与心得。个人认为Spring的学习阶级分为四级,第一阶级:对Spring应用有一定经验,了解Spring解决了什么问题;第二阶级:对Spring原理有一定认识,大概知道IOC、AOP实现原理以及应用场景;第三阶级:开始深入的了解Spring源码,对Spring

2020-07-08 13:58:56 333

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除