
Spring
文章平均质量分 84
cj_eryue
工作之余的学习
展开
-
SpringMVC处理器映射器HandlerMapping详解
昨天在进行spring的安全升级时,遇到一个奇葩问题:原始版本为4.1.9,升级至5.3.34,由于是几年前的项目,请求路径还是带有.action的老式写法(如login.action),而有的不带(如:index),升级完后,就发现了问题,login.action能访问到,请求index时,日志爆了 no mapping for GET。我们来看看是怎么回事。原创 2024-06-28 11:50:04 · 1340 阅读 · 0 评论 -
TransactionSynchronizationManager的使用场景以及原理分析
TransactionSynchronizationManager.registerSynchronization()的原理就是通过threadLocal获取到当前线程所持有的的dataResource,注册一个乃至多个事务同步方法,在事务提交前后分别执行对应的事务同步方法。原创 2023-09-25 17:17:53 · 6545 阅读 · 1 评论 -
spring接入nacos配置中心
spring接入nacos原创 2023-03-31 17:51:16 · 2417 阅读 · 0 评论 -
Spring事件发布-ApplicationListener的原理浅析
之前在分析dubbo服务暴露流程时候,忽略了服务的延迟暴露延迟(配了delay参数)暴露服务是在ServiceBean的afterPropertiesSet方法(bean初始化时)中执行export(),然后通过延时任务(ScheduledExecutor)来触发服务暴露的。 非延迟(未配置delay参数)暴露服务是在ServiceBean的onApplicationEvent方法(spring容器初始化完成时)中执行export()来立即触发服务暴露的。Dubbo 2.6.5 版本以后,如果我原创 2021-04-02 13:39:14 · 593 阅读 · 0 评论 -
Spring事务的隔离级别以及传播
一、事务的基本要素(ACID)事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功。其必须遵循四个原则(ACID)。原子性(Atomicity):指一个事务要么全部执行,要么不执行,也就是说一个事务不可能只执行了一半就停止了.比如你从取款机取钱,这个事务可以分成两个步骤:1划卡,2出钱.不可能划了卡,而钱却没出来.这两步必须同时完成.要么就不完成。 一致性(Consistency):在事务执行前数据库的数据处于正确的状态,而事务执行完成后数据库的数据还是应该处原创 2021-03-24 20:32:06 · 362 阅读 · 0 评论 -
Spring注解开发(十四)——事务基本原理分析
目录声明式事务实现原理Demo源码分析1.@EnableTransactionManagement2.AutoProxyRegistrar3.ProxyTransactionManagementConfiguration:3.1AnnotationTransactionAttributeSource:3.2TransactionInterceptor:基本步骤配置数据源:DataSource 配置事务管理器来控制事务:PlatformTransactionManag原创 2021-03-24 00:39:36 · 638 阅读 · 0 评论 -
InstantiationAwareBeanPostProcessor 在bean生命周期里的执行时机
https://blog.youkuaiyun.com/u010634066/article/details/80321854实例化---调用构造函数创建bean初始化---调用set方法,给属性赋值InstantiationAwareBeanPostProcessor继承BeanPostProcessor接口public interface InstantiationAwareBeanPostProcessor extends BeanPostProcessor { @Nullable原创 2021-01-13 15:27:46 · 447 阅读 · 0 评论 -
手撕spring bean的生命周期
Springbean的生命周期一直是面试高频题,想答好,还得看源码bean的生命周期,从源码角度来说,值得我们关注的主要有四个大点,穿插在bean的创建过程中,所以显得散乱:实例化对应构造方法,属性赋值对应setter方法的注入,初始化和销毁是用户能自定义扩展的两个阶段,如我们可以指定初始化方法和销毁方法,这部分之前的文章有分析过。对应的执行顺序为:实例化->属性赋值->初始化->销毁我们先来看实例化:这里简单的提下注入bean的几种方式:1.XM.原创 2021-01-11 11:14:16 · 366 阅读 · 3 评论 -
Spring注解开发(十三)——AOP拦截器链的调用流程
拦截器链的调用流程先看下流程图:分析:入口CglibMethodInvocation.proceed():currentInterceptorIndex是一个标识符,初始值为-1,记录当前拦截器的索引如果没有拦截器,或者拦截器的索引和拦截器数组大小-1相等(也就是执行到最后一个拦截器),则执行目标方法。第一步:currentInterceptorIndex从-1开始,自增变成0,执行下面的逻辑,不用太过关注通过mi.proceed进行链式调用,进.原创 2020-11-19 23:56:32 · 804 阅读 · 0 评论 -
Spring注解开发(十二)——AOP原理之拦截器链
目标方法执行:容器中保存了组件的代理对象,这个对象保存了详细信息(比如增强器,目标对象等)1)、拦截目标方法的执行2)、根据this.advised(proxyFacroty)获取将要执行的目标方法的拦截器链 2.1)、List<Object>interceptorList=newArrayList(advisors.length); 保存拦截器:一个默认的org.springframework.aop.interceptor.Ex...原创 2020-11-19 00:28:56 · 589 阅读 · 0 评论 -
Spring注解开发(十一)——创建AOP代理
上篇博客说到了AnnotationAwareAspectJAutoProxyCreator的创建以及注册,知道了它拦截所有的bean的创建(即每一个bean创建之前会调用下面的截图的方法),那拦截具体做了什么呢,我们来分析:我们dubug来跟踪MathCalculator和LogAspects的创建①:判断当前bean是否在advisedBeans中,advisedBeans中保存了所有需要增强的bean②判断是不是基础类型是否是如下这些接口:Advice、Pointcut、..原创 2020-11-12 23:11:34 · 155 阅读 · 0 评论 -
Spring注解开发(十)——AOP小实践&源码初步分析之注册AnnotationAwareAspectJAutoProxyCreator后置处理器
业务类:package com.cjian.aop;/** * @description: * @author: cWX969834 * @time: 2020/11/4 9:06 */public class MathCalculator { public int div(int a, int b) { System.out.println("除法。。。"); return a / b; }}切面类:package c.原创 2020-11-04 21:33:09 · 240 阅读 · 0 评论 -
Spring注解开发(九)——@Profile注解的使用
@Profile:指定组件在哪个环境下才能被注册到容器中,不指定,任何环境下都能注册这个组件加了环境标识的bean,只有这个环境被激活的时候才能注册到容器中,默认是default环境 卸载配置类上,只有是指定的环境的时候,整个配置类里面的所有的配置才会生效,有点类似@Conditional 没有标注环境标识的bean在任何环境下都是加载的/* * Copyright (c) Huawei Technologies Co., Ltd. 2019-2020. All rights reser.原创 2020-11-03 20:17:45 · 500 阅读 · 0 评论 -
Spring注解开发(八)——自动装配@Autowired&@Resource&@Inject
目录@Autowired@Resource@Inject@Autowired自动注入:默认优先按照类型去容器中找对应的组件 annotationConfigApplicationContext.getBean(PersonDao.class) 如果找到多个相同类型的组件,再将属性的名称作为组件的id去容器中查找 annotationConfigApplicationContext.getBean("personDao") 使用@Qualifier指定要注..原创 2020-11-03 18:57:45 · 851 阅读 · 0 评论 -
Spring注解开发(七)——属性赋值@Value&@PropertySource
使用@Value给属性赋值@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface Value { String value();}package com.cjian.bean;import org..原创 2020-11-03 14:26:16 · 279 阅读 · 0 评论 -
Spring注解开发(六)——Bean的生命周期以及BeanPostProcessor的源码分析
目录1.指定初始化和销毁方法:2.让Bean实现InitializingBean和DisposableBean接口3.使用JS250规范提供的两个注解4. BeanPostProcessor(重点):bean的后置处理器BeanPostProcessor的工作原理(源码分析)Bean的生命周周期:bean的创建--初始化--销毁的过程我们可以自定义初始化和销毁方法,容器在bean进行到当前生命周期的时候来调用我们自定义的初始化和销毁方法对象的创建:单实例在容器启动的...原创 2020-10-30 10:36:14 · 324 阅读 · 0 评论 -
Spring注解开发(五)——使用FactoryBean注册组件
使用spring提供的BeanFactory注册对象需注意:1.默认获取到的是工厂bean调用getObject方法创建的对象;2.如果要获取工厂bean本身,需要给id前加一个&package com.cjian.bean;import org.springframework.beans.factory.FactoryBean;/** * @description: * @author: cWX969834 * @time: 2020/10/28 21:02 */.原创 2020-10-28 21:15:22 · 168 阅读 · 0 评论 -
Spring注解开发(四)——@Import 快速给容器中导入一个组件
@Import({class})@Import({class}): 容器会自动注册这些组件,id默认是全类名路径如导入Color、Red/* * Copyright (c) Huawei Technologies Co., Ltd. 2019-2020. All rights reserved. */package com.cjian.config;import com.cjian.bean.Color;import com.cjian.bean.Person;impo原创 2020-10-28 20:55:07 · 301 阅读 · 0 评论 -
Spring注解开发(三)——@Conditional(SpringBoot底层大量使用到的注解)
@Conditional :按照一定的条件进行判断,满足条件才给容器中注册bean,这也是springboot底层大量使用的注解package com.cjian.config;import com.cjian.bean.Person;import com.cjian.condition.LinuxCondition;import com.cjian.condition.WindowsCondition;import org.springframework.context.ann..原创 2020-10-28 18:58:59 · 345 阅读 · 0 评论 -
Spring注解开发(二)——自动扫描组件之指定扫描规则&自定义过滤规则
目录指定扫描规则使用 FilterType.ANNOTATION使用 FilterType.ASSIGNABLE_TYPE自定义过滤法规则使用 FilterType.CUSTOM上篇我们通过一个配置类MainConfig往IOC中注册了一个bean,那我么可以控制哪些组件不注册到IOC中呢?指定扫描规则@ComponentScan 注解类给我们提供了一以下的功能:package org.springframework.context.annotation;..原创 2020-10-28 17:15:46 · 813 阅读 · 0 评论 -
Spring注解开发(一)——使用注解往IOC中注入一个实例
新建一个maven项目并添加spring-context 依赖<!--https://mvnrepository.com/artifact/org.springframework/spring-context--><dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <v原创 2020-10-28 15:58:29 · 333 阅读 · 1 评论 -
动态代理实践以及底层原理分析
自Java 1.3以后,Java提供了动态代理技术,允许开发者在运行期创建接口的代理实例,后来这项技术被用到了Spring的很多地方。JDK动态代理主要涉及java.lang.reflect包下边的两个类:Proxy和InvocationHandler。其中,InvocationHandler是一个接口,可以通过实现该接口定义横切逻辑,并通过反射机制调用目标类的代码,动态地将横切逻辑和业务逻辑贬值在一起。JDK动态代理的话,他有一个限制,就是它只能为接口创建代理实例,而对于没有通过接口定义业务方法的类,原创 2020-10-16 17:12:07 · 276 阅读 · 0 评论