spring源码解析
文章平均质量分 90
天高任鸟飞-海阔凭鱼跃
天高任鸟飞 海阔凭鱼跃
展开
-
SpringMVC启动原理与父子容器源码剖析
1、父子容器的关系,启动过程。父容器加载service,dao服务,子容器加载controller等mvc组件类。tomcat通过SPI的机制加载ServletContainerInitializer的实现类的方式来找到WebApplicationContainer的实现类并执行WebApplicationContainer实现类的onStartup方法的方式来启动父子容器的(AbstractContextLoaderInitializer#onStartup中通过registerContextLoader原创 2021-10-17 22:54:28 · 408 阅读 · 0 评论 -
HandlerAdapters
Spring MVC为我们提供了多种处理用户的处理器(Handler),Spring实现的处理器类型有Servlet、Controller、HttpRequestHandler以及注解类型的处理器,即我们可以通过实现这些接口或者注解我们的类来使用这些处理器,那么针对不同类型的处理器,如何将用户请求转发到相应类型的处理器方法中的呢,这就需求Spring MVC的处理器适配器来完成适配操作,这就是处理器适配器要完成的工作。SimpleServletHandlerAdapter 适配Servlet处理器 H原创 2020-11-23 01:09:54 · 165 阅读 · 0 评论 -
HandlerMapping
默认情况下,Spring MVC会加载在当前系统中所有实现了HandlerMapping接口的bean,再进行按优先级排序。如果只期望Spring MVC只加载指定的HandlerMapping,可以修改web.xml中的DispatcherServlet的初始化参数,将detectAllHandlerMappings的值设置为false。这样,Spring MVC就只会查找名为“handlerMapping”的bean,并作为当前系统的唯一的HandlerMapping。所以在DispatcherServ原创 2020-11-23 00:53:13 · 438 阅读 · 0 评论 -
容器初始化,请求处理
web.xml配置<web-app> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation<原创 2020-11-23 00:17:21 · 219 阅读 · 0 评论 -
springmvc原理解析
1、web框架功能分析2、模拟springmvc写web框架3、springmvc整体架构servlet和spring 实现web框架IOC处理器:做业务处理的组件 类 方法 跟url有映射关系功能分析:使用内嵌tomcat作为servlet容器,打开IOC扫描,后置处理器,IOC取出处理器 处理器spring注解:@Controller 普通的bean Map<url,Object处理器>springmvc注解:@...原创 2020-11-23 00:11:18 · 108 阅读 · 0 评论 -
springmvc请求处理流程
1、springmvc请求处理流程 <mvc:annotation-driven> 会默认启用RequestMappingHandlerMapping和RequestMappingHandlerAdapter2、HandlerMapping用法及源码解析 处理器映射器, map<url,处理器> 是一个接口,只有一个getHandler(HttpServletRequest var1)一个方法 映射器有四种: 三种处理器: ...原创 2020-11-22 22:40:02 · 191 阅读 · 0 评论 -
servlet
通过url访问资源有三个步骤:接收请求 处理请求 响应请求web服务器:将某个主机上的资源映射为一个URL供外界访问,完成接收和响应请求servlet容器:存放着servlet对象(由程序员编程提供),处理请求Servletpublic interface Servlet { //tomcat反射创建servlet之后,调用init方法传入ServletConfig void init(ServletConfig var1) throws ServletExcepti原创 2020-11-16 00:23:30 · 110 阅读 · 0 评论 -
Spring中事务的底层工作原理
@EnableTransactionManagement注解注入了两个bean:AutoProxyRegistrar ProxyTransactionManagementConfigurationAutoProxyRegistrarAutoProxyRegistrar主要的作用就是注册了一个InfrastructureAdvisorAutoProxyCreator的Bean。而InfrastructureAdvisorAutoProxyCreator继承了AbstractAdvi..原创 2020-11-12 22:35:05 · 549 阅读 · 0 评论 -
Spring事务
1. 数据库事务 commit rollback2. @Transactional注解底层工作原理源码解析 1)有Transactional注解,生成要给代理bean类 代理逻辑 2)执行方法前,datasource 获取一个数据库连接,spring建立的数据库连接,connection.setAutoCommit(false) 3)执行脚本 4)connection.commit(); 代理逻辑3. 传播机制源码解析 默认是requ...原创 2020-11-12 22:33:45 · 91 阅读 · 0 评论 -
Spring中的AOP底层原理分析
AOP中的几个概念Advisor 和 AdviceAdvice,我们通常都会把他翻译为通知,其实很不好理解,其实他还有另外一个意思,就是“建议”,我觉得把Advice理解为“建议”会更好。比如,我们已经完成了一个功能,这时客户跟我们说,我建议在这个功能之前可以再增加一些逻辑,再之后再增加一些逻辑。在Spring中,Advice分为:前置Advice:MethodBeforeAdvice 后置Advice:AfterReturningAdvice 环绕Advic...原创 2020-11-10 22:48:38 · 358 阅读 · 0 评论 -
Spring与Dubbo整合原理
应用启动类与配置public class Application { public static void main(String[] args) throws Exception { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ProviderConfiguration.class); context.start(); S原创 2020-11-05 02:15:07 · 331 阅读 · 0 评论 -
dubbo整合spring源码解析
1@Service注解的实现流程2@Reference注解的实现流程 DemoService 一个服务生成两个bean 1)DemoServiceImpl ---> demoServiceImplBean(普通) 2)根据DemoServiceImpl上的@Service注解生成一个serviceBean,这个bean的ref属性指向demoServiceImpl这个bean。serviceBean还实现了ApplicationListener<Contenx...原创 2020-11-05 02:13:10 · 161 阅读 · 0 评论 -
Spring整合Mybatis核心原理分析
1.3.2版本通过@MapperScan导入了MapperScannerRegistrar类 MapperScannerRegistrar类实现了ImportBeanDefinitionRegistrar接口,所以Spring在启动时会调用MapperScannerRegistrar类中的registerBeanDefinitions方法 在registerBeanDefinitions方法中定义了一个ClassPathMapperScanner对象,用来扫描mapper 设置ClassPa.原创 2020-11-03 22:55:43 · 296 阅读 · 0 评论 -
Spring中的推断构造方法的底层原理分析
Spring中的一个bean,需要实例化得到一个对象,而实例化就需要用到构造方法。一般情况下,一个类只有一个构造方法:要么是无参的构造方法 要么是有参的构造方法如果只有一个无参的构造方法,那么实例化就只能使用这个构造方法了。如果只有一个有参的构造方法,那么实例化时能使用这个构造方法吗?要分情况讨论:使用AnnotationConfigApplicationContext,会使用这个构造方法进行实例化,那么Spring会根据构造方法的参数信息去寻找bean,然后传给构造方法 使用Clas原创 2020-11-01 22:47:25 · 448 阅读 · 0 评论 -
推断构造方法
@Configuration注解 如果一个bean增加了@Configuration注解,得到的就是一个代理对象 增加了@Configuration的配置类,加了@Bean注解的方法,如果不是spring自身执行的话,就走代理,会直接根据beanFactory从单例池中去查找,否则执行bean的正常创建。这两个是否是同一个对象?是的。推断构造方法@Autowired也可以声明再参数前面,不过目前spring只在junit测试中使用了,暂时不支持。推断构造方法:Abstract...原创 2020-11-01 22:44:53 · 621 阅读 · 0 评论 -
Spring循环依赖底层原理与设计思想
Spring循环依赖底层原理与设计思想1. 什么是循环依赖?2. 循环依赖并不能彻底解决,就算非构造方法注入也不能,为什么?3. “二级缓存”如何解决循环依赖?4. Spring为什么用“三级缓存”去解决循环依赖?5. 总结“三级缓存”的精妙之处bean的生命周期AService 的生命周期1实例化(new Aservice)---->原始对象---->三级缓存map<beanName,lamda表达式(beanName,bd,原始对象)>2填充bServic原创 2020-10-30 21:46:14 · 242 阅读 · 0 评论 -
Spring解析配置类以及扫描源码解析
配置类:@Component @ComponentScan @Configuration @Import(本身的类是配置类,引入的类也会当成配置类,不管被引入的类有没有注解) @ImportResource @Bean加载方法上的类怎么查找配置类:找出所有的beandefinition,根据注解等规则找出所有的配置类,---->生成ConfigurationClass,配置信息都设置到此类的属性中---->找出所有的beandefinition注册到beanfactory中如何解析.原创 2020-10-29 22:35:57 · 386 阅读 · 0 评论 -
BeanFactoryPostProcessor执行流程
1.BeanFactoryPostProcessor执行流程 BeanFactoryPostProcessor BeanDefinitionRegistryPostProcessor 继承了 BeanPostProcessor 先执行BeanDefinitionRegistryPostProcessor#postProcessBeanDefinitionRegistry ,在执行BeanFactoryPostProcessor.postProcessBeanFact...原创 2020-10-28 09:47:02 · 238 阅读 · 0 评论 -
spring容器启动过程
1.什么是BeanFactoryPostProcessor叫做BeanFactory的后置处理器,和Bean的后置处理器对比理解。BeanPostProcessor是用来对Bean进行处理的,BeanFactoryPostProcessor是用来对BeanFactory进行处理的。2.ApplicationContext启动过程详解下面以AnnotationConfigApplicationContext为例子,来介绍refresh的底层原理。1. 在调用AnnotationConfig...原创 2020-10-27 03:01:58 · 517 阅读 · 0 评论 -
@Import与@ImportResource注解的解读
前言 在使用Spring-Cloud微服务框架的时候,对于@Import和@ImportResource这两个注解想必大家并不陌生。我们会经常用@Import来导入配置类或者导入一个带有@Component等注解要放入Spring容器中的类;用@ImportResource来导入一个传统的xml配置文件。另外,在启用很多组件时,我们会用到一个形如@EnableXXX的注解,比如@EnableAsync、@EnableHystrix、@EnableApollo等,点开这些注解往里追溯,你也会发现@I..转载 2020-10-26 17:00:55 · 521 阅读 · 0 评论 -
Bean的销毁过程
1. @Autowired底层源码分析补充 @Lazy放在类上的时候: 用到bean的时候再去生成bean @Lazy放在属性上的时候: 用到对象方法的时候,才会去生成 自己使用@Autowired注解自己,在依赖注入的时候,先把自己排除,如果除了自身外再没有了,就把自己再加回来,从而实现自己依赖注入自己。2. @Resource底层源码分析 javax.annotation.Resource CommonAnnotatio...原创 2020-10-22 22:39:06 · 1028 阅读 · 0 评论 -
Spring中的Qualifier应用
应用@Qualifier可以用来让程序员明确指定想要指定哪个bean,那有程序员就会想问,它和@Autowired和@Resource的区别是什么?假设有如下bean定义: <bean id="user0" class="com.luban.entity.User"> <property name="name" value="user0000"/> </bean> <bean id="user1" clas.原创 2020-10-20 22:43:08 · 3164 阅读 · 0 评论 -
IOC查找bean的流程
查找bean时的过滤流程:@Value ---> 如果没有@Value,根据type查找 ---> isAutowireCandidate -----> generic ---> qualifier ---> @Primary --> @Priority --> byName (dependencyName )1. resolveDependency()方法源码解析 两种情况, 情况一:走缓存 情况...原创 2020-10-20 22:40:08 · 341 阅读 · 1 评论 -
依赖注入底层原理
依赖注入底层原理 通过反射设置的1 spring中到底有几种依赖注入的方式 spring自带的sping依赖注入的代码是xml方式的自动注入,依赖属性是byType,byName,constructor,default,no。autowired自动注入的是继承BeanPostProcessor接口来实现的 手动注入所依赖的bean的时候,扫描bean标签生成BeanDefinition时,依赖的bean存在Properties中,类似于map ,key:name,value:bea...原创 2020-10-18 22:58:17 · 670 阅读 · 0 评论 -
Bean创建的生命周期步骤
1.Bean创建的生命周期步骤 加载类 resovleBeanClass(beanname,bedefinition)来加载类 BeanDefinition 的beanClass 是Object 类型(存的是类的全限定名或class),因为扫描后,通过ASM技术,解析字节码得到calss名称,这里只存放类的全路径名 doResolveBeanClass 得到类加载器 得到类...原创 2020-10-18 23:09:56 · 280 阅读 · 0 评论 -
bean的生命周期
1 FactoryBean 重写三个方法,一个getObject,getObjectType,isSingleton FactoryBean是懒加载的 factorybean对应的单例不是spring容器启动的时候生成的,是调用getBean的时候生成的。 spring启动后,会再单利池中增加一个以FactoryBean名字首字母小写为名称的bean 要获取factoryBean实例,在名称前面增加&符号 获取bean后会调用ge...原创 2020-10-13 22:17:05 · 130 阅读 · 0 评论 -
Spring中核心概念详解(看源码必备)
BeanDefinitionBean的定义,在Spring中,我们可以如何去定义一个Bean?<bean/> @Bean @Component(@Service,@Controller)还有就是可以通过BeanDefinition比如,我们可以通过定义一个BeanDefinition对象来表示定义了一个Bean:// 定义了一个BeanDefinitionAbstractBeanDefinition beanDefinition = BeanDefiniti..原创 2020-10-11 22:20:45 · 251 阅读 · 0 评论 -
Spring中核心概念
1. BeanDefinition ApplicationContext才有扫描的方法 定义一个bean的方式: 声明式:<bean/>,@Bean,@Component 编程式:BeanDefinitionBuilder BeanDefinitionReader是用来生成beandefinition 的。 BeanDefinitionReader注册beandefinition后,applicationcontext.refresh()...原创 2020-10-11 22:20:03 · 127 阅读 · 0 评论 -
spring启动过程
1 每个类加载器都有它自己的一个加载路径 Bootstrap jre/lib ext jre/ext/lib AppClassLoader classpath:2 BeanNameAware,InitializingBean,BeanPostProcessor org.springframework.beans.factory.BeanNameAware#setBeanName 用来获取bean容器生成的beanName org.sp...原创 2020-10-08 23:24:18 · 138 阅读 · 0 评论 -
spring boot 使用application.properties 进行外部配置
application.properties大家都不陌生,我们在开发的时候,经常使用它来配置一些可以手动修改而且不用编译的变量,这样的作用在于,打成war包或者jar用于生产环境时,我们可以手动修改环境变量而不用再重新编译。spring boot允许你自定义一个application.properties文件,然后放在以下的地方,来重写spring boot的环境变量或者定义你自己环境变量当前目录的 “/config”的子目录下当前目录下classpath根目录的“/config”包下.转载 2020-08-10 00:17:48 · 1087 阅读 · 0 评论 -
SpringBoot中的application.properties外部注入覆盖
由想要忽略properties中的某些属性,引发的对SpringBoot中的application.properties外部注入覆盖,以及properties文件使用的思考。SpringBoot 配置文件application.properties配置参数替换或者注入的几种方式之所以研究这个问题,原因是因为,我的项目如果通过git备份到码云上之后,mysql以及redis的密码也保存上去了,这样肯定是不行的,但是我如果忽略application.properties的话,就缺失了关键的配置..转载 2020-08-09 23:53:25 · 2483 阅读 · 0 评论 -
SpringBoot之神奇的properties&覆盖顺序
背景前面我们描述了spring profile和maven profile的异同maven profile VS spring profile通常意义上我们说的配置一般都是properties文件,但是spring支持yml【结构程度更好】EnableConfigurationProperties原先我们在使用Spring时更多的是使用value注解进行注入,但是对于比较多的属性的情况下也只能一味的进行复制拷贝Spring支持了EnableConfigurationPropertie转载 2020-08-09 23:33:03 · 1630 阅读 · 0 评论 -
Spring中property-placeholder的使用与解析
我们在基于spring开发应用的时候,一般都会将数据库的配置放置在properties文件中. 代码分析的时候,涉及的知识点概要:NamespaceHandler 解析xml配置文件中的自定义命名空间 ContextNamespaceHandler 上下文相关的解析器,这边定义了具体如何解析property-placeholder的解析器 BeanDefinitionParser 解析bean definition的接口 BeanFactoryPostProcessor 加载好bean defin转载 2020-08-07 16:52:38 · 662 阅读 · 0 评论 -
Spring面试,IoC和AOP的理解
spring 的优点?1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦2.可以使用容易提供的众多服务,如事务管理,消息服务等3.容器提供单例模式支持4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能5.容器提供了众多的辅助类,能加快应用的开发6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等7.spri...转载 2020-01-14 07:13:16 · 189 阅读 · 0 评论 -
[spring源码学习]十、IOC源码-conversionService
https://www.cnblogs.com/jyyzzjl/p/5478620.html一、代码示例 1、我们在之前的Person类里新增一个两个属性,分别是客户的兴趣和生日,兴趣爱好有很多,我们使用list进行保存,生日使用日期进行保存public class Person { private String name; public Date birth;...转载 2019-03-24 20:32:29 · 175 阅读 · 0 评论 -
Spring IoC源码解析——Bean的创建和初始化
https://www.cnblogs.com/yxh1008/p/6012230.htmlJAVA编程交流群:574337670目录Spring介绍 IoC介绍 IoC是什么 IoC能做什么 源码解析 准备工作 开始解析 创建Bean 初始化Bean 总结正文回到顶部Spring介绍Spring(http://spring.i...转载 2019-03-21 01:34:49 · 297 阅读 · 0 评论 -
Spring IOC之ignoredDependencyInterface
https://blog.csdn.net/gosaint/article/details/85010300在阅读Spring源码的时候,我曾经遇到了一个方法ignoredDependencyInterface();当时很是困惑,在查阅大量的资料的时候才初步的理解到了这个方法的作用。这篇文章是迈向Spring IOC源码的初步。可能在文章中存在个人的偏见或者主观臆测,希望大家不要留面子,直接指...转载 2019-03-15 13:08:19 · 290 阅读 · 0 评论 -
@postconstruct初始化的操作
https://blog.csdn.net/u013452335/article/details/81632236从Java EE 5规范开始,Servlet中增加了两个影响Servlet生命周期的注解(Annotion);@PostConstruct和@PreDestroy。这两个注解被用来修饰一个非静态的void()方法 。写法有如下两种方式:@PostConstructPubli...转载 2019-03-09 23:49:43 · 527 阅读 · 0 评论 -
spring中Constructor、@Autowired、@PostConstruct的顺序
https://blog.csdn.net/u014515854/article/details/78832790其实从依赖注入的字面意思就可以知道,要将对象p注入到对象a,那么首先就必须得生成对象p与对象a,才能执行注入。所以,如果一个类A中有个成员变量p被@Autowired注解,那么@Autowired注入是发生在A的构造方法执行完之后的。如果想在生成对象时候完成某些初始化操作,而偏...转载 2019-03-09 23:46:46 · 83 阅读 · 0 评论 -
Spring源代码解析 ---- 循环依赖
https://www.cnblogs.com/bhlsheji/p/5208076.html 一、循环引用: 1. 定义: 循环依赖就是循环引用,就是两个或多个Bean相互之间的持有对方,比方CircularityA引用CircularityB,CircularityB引用CircularityC,CircularityC引用CircularityA。形成一个环状引用关系。...转载 2019-02-11 11:37:42 · 159 阅读 · 0 评论