程序员劝退师-TAO
没事敲两行代码
展开
-
Spring源码Gradle编译保姆级教程
这里Spring的源码采用的是Gradle进行项目依赖管理的,那么我们需要安装Gradle环境,这个本文中不涉及。这是因为spring从2021.2.21日开始不再支持匿名用户访问/libs-release的目录了。idea中在 Help --> Edit custom VM options添加设置。原创 2024-01-17 14:52:40 · 383 阅读 · 0 评论 -
Spring源码调试技巧
我们知道Spring在创建Bean是才分为三个阶段,实例化、属性填充、初始化操作,那么实例化某个Bean的端点其实很好找!首先通过第一步,我们能快速定位到某个Bean的实例化阶段,那么找到某个Bean的属性填充阶段就很简答了,就在同一个方法里面,如下!然后启动debug,那么当Spring在调用这个类的构造方法时就会被端点卡住!这样我们就只需要一个断点就能快速定位到这个Bean的实例化。当前断点往上推一个调用栈就能找到实例化入口!原创 2022-12-16 18:07:30 · 707 阅读 · 0 评论 -
Spring核心内容
这篇文章谈谈最近看完的Spring的源码,总的来说Spring核心也就是IOC,控制反转,但是IOC只是个概念,我们搞懂IOC需要先知道控制什么,反转什么,实际上也就是控制对象的创建的权利,反转就是之前对象由我们自己创建,现在交给Spring来完成创建,IOC只是个变成概念,他的落地实现是DI,也就是依赖注入,说了这么多,还要提一下Spring的另一个重要概念,AOP,AOP是Spring的IOC中容器创建的重要一环,也是对象创建的重要一环,现在我们回到Spring的整体,Spring中有一些比较重要的属性原创 2022-05-03 15:24:01 · 490 阅读 · 0 评论 -
BeanFactoryPostProcessor源码分析
前言BeanFactoryPostProcessor,我们都知道是一个工厂后置处理器,是Spring容器级别的,就是用来修改Spring扫描我们的包后生成BeanDefinitionMap后执行实现BeanFactoryPostProcessor接口重写的postProcessBeanFactory方法!@Servicepublic class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor { @Override原创 2022-03-22 20:49:52 · 703 阅读 · 0 评论 -
Spring BeanDefinition的解析过程源码分析(下)
前言本文主要接上文Spring BeanDefinition的解析过程源码分析(上)上文讲到准备调用refresh(),本文还是不会对refresh()方法中所有方法进行分析,还是围绕BeanDefinition的解析来分析,本文篇幅可能过长!进入refresh()方法@Override public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownM原创 2022-03-18 18:04:11 · 456 阅读 · 0 评论 -
Spring BeanDefinition的解析过程源码分析(上)
前言本文接上文Spring 完整实现流程、完整源码分析,主要分析Spring执行refresh()方法前的一些操作!使用注解启动!启动类源码分析1.切入AnnotationConfigApplicationContext创建AnnotationConfigApplicationContext对象,代码如下本文主要分析refresh()方法之前的流程,这里this调用如下代码 public AnnotationConfigApplicationContext() { this.reade原创 2022-03-16 01:21:02 · 432 阅读 · 0 评论 -
Spring 完整实现流程、完整源码分析
前言Spring这个框架相当于说我们做JAVA服务端开发的人员是必备的框架,那么在面试的时候Spring也是无法逃脱的,说到Spring那么就不得不提IOC和AOP,往往我们分析Spring的源码的时候都是直接切入refresh()方法,而忽略了一些其他的细节,当然refresh()方法也很重要,那么本文作文Spring整个框架源码分析的一个聚合,不单是只分析refresh()方法中调用的方法,还会分析整个Spring启动的过程!环境准备本文代码环境基于Spring5.1.5,基本依赖如下依赖准备原创 2022-03-15 23:58:33 · 963 阅读 · 0 评论 -
Spring关于StandardEnvironment
前言简单来说这个就是一套标准环境简单使用 @Autowired private StandardEnvironment environment; @Test void test1(){ String s = environment.resolvePlaceholders("${rmq.name-server:}"); log.info("===>{}",s); }输出结果...原创 2021-12-23 11:07:35 · 984 阅读 · 0 评论 -
Spring按条件加载Bean
@ConditionalOnClass(DefaultMQProducer.class) ~~春波特: 属性直接使用类是不科学的,需要用(name=“类全名”) 方式,这样在类不在classpath时,不会抛出CNFE原创 2021-11-28 22:17:12 · 506 阅读 · 0 评论 -
Spring使用@Autowired将实现类注入List或者Map中
前言在看一些框架源码或者直接做一些项目的时候经常会将bean自动注入到List或者Map中,我是在调试源代码的时候看到这种写法的,然后就想起这玩意,记录一下这种自动注入的写法,下面我们就来看看这个具体怎么玩编码1.定义一个接口public interface MP{ void perform();}2.编写MP的实现类@Componentpublic class MPAImpl implements MP{ @Override public void perform() {原创 2021-04-15 21:56:17 · 3460 阅读 · 0 评论 -
ApplicationContextAware接口的作用
前言在我们开发Spring项目时,不管是使用别人的开源框架,还是使用自己公司框架,或者是自己搭建框架的时候,会见到ApplicationContextAware这个接口,可能最常见的是如下代码public class PermitAllUrlProperties implements InitializingBean, ApplicationContextAware {这是我在搭建自己的微服务框架SpringSecurityOAuth2这部分的代码时使用到的场景,那么下面就针对这个Applicati原创 2021-04-08 21:47:58 · 4708 阅读 · 1 评论 -
Spring AOP实现流程、源码分析
前言AOP字面意思解释就是面向切面编程,面向切面编程是一种编程模型,我们知道JAVA是面向对象的也就是OOP,OOP这种面向对象的编程适用于定义纵向的关系,但是并不适用定义横向的关系。那么应对这种OOP的存在的这些不利,AOP面向切面的编程模型作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。可用于权限认证、日志、事务处理。AO原创 2021-03-07 23:28:52 · 772 阅读 · 2 评论 -
BeanFactory和FactoryBean的区别、作用
前言这个问题也是属于Spring面试中经常被问东西,那么这篇文章就来梳理一下!区别、作用BeanFactory:BeanFactory也是个工厂,Spring中的Bean都是BeanFactory生产进行管理的,特殊的Bean除外,如FactoryBean实现的!BeanFactory是实现IOC容器的核心接口,它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。BeanFactory是一个接口,提供IOC容器最基本的形式,也就是给Spring实现IOC容器提供规范的,并不原创 2021-02-25 18:32:16 · 523 阅读 · 0 评论 -
Spring Bean的生命周期
前言Spring框架在面试过程中是必问,Spring Bean的生命周期也是高频问题,结合了一些资料,梳理了一下Spring Bean的生命周期的流程,如下图。首先这些调用的类型可以归为4大类,当然也有归结为3大类的4大类归结Bean自身的方法:包括两个调用Init-method()、destroy-method()Bean级生命周期接口方法:实现BeanNameAware、BeanFactoryAware、InitializingBean、DisposableBean接口容器级生命周期接口原创 2021-02-24 23:30:37 · 386 阅读 · 0 评论 -
Spring循环依赖源码分析
前言这篇文章不讲过多的废话,循环依赖简介请看Spring中的循环依赖问题,这篇文章中有循环依赖的描述源码分析1.入口这里的入口方法是在AbstractApplicationContext类中的refresh()方法中的finishBeanFactoryInitialization(beanFactory);这行代码!这个方法是初始化所有剩余非懒加载单例对象!2.进入finishBeanFactoryInitialization此处调用的preInstantiateSingletons原创 2021-02-23 20:07:20 · 229 阅读 · 0 评论 -
Spring中的循环依赖问题
前言Spring中的循环依赖其实是一个非常简单的东西,在面试过程中会经常被问到,一般面试官会问Spring中循环依赖问题怎么解决,或者是A类一个属性指向B,B类中一个属性指向A这种问题再Spring中怎么解决。嘿嘿,这要是真的从怎么解决的角度入手那就真的掉坑里了。都是在问怎么解决,又没说让你解决,都说了是Spring中。那么当然问的是Spring是怎么解决的!我们只需要说明循环依赖时怎么产生的,以及Spring是怎么解决的,加分项,为什么需要三级缓存!搞定这些Spring循环依赖没什么问题!什么是循环依原创 2021-02-21 23:02:54 · 226 阅读 · 1 评论 -
Spring源码分析(流程梳理)
前言近期过年,在家待业,想闲着也是闲着,干脆充充电,撸撸Spring的源码玩玩,一提到Spring那么脑子里就会出现IOC和AOP首先需要先搞定IOC,IOC先搞懂了,那么理解AOP就更加简单了!IOCIOC大部分人都知道是容器,翻译过来是控制反转...原创 2021-02-20 20:24:05 · 455 阅读 · 1 评论