承接前文监听器对bootstrapContext创建的引导,笔者了解到其主要入口类为BootstrapImportSelectorConfiguration.本文将基于此类进行简单的分析 BootstrapImportSelectorConfiguration 简单的配置类,看下源码 @Configuration @Import(BootstrapImportSelector.class) public class BootstrapImportSelectorConfiguration { }…
基于前文对springcloud的引导,本文则从源码角度查阅下cloud的context板块的运行逻辑 前言 springcloud是基于springboot开发的,所以读者在阅读此文前最好已经了解了springboot的工作原理.本文将不阐述springboot的工作逻辑 Cloud Context springboot cloud context在官方的文档中在第一点被提及,是用户ApplicationContext的父级上下文,笔者称呼为BootstrapContext.根据springb…
本文则将重点阐述context板块的自动配置类,观察其相关的特性并作相应的总结 自动配置类 直接查看cloudcontext板块下的spring.factories对应的EnableAutoConfiguration键值对 # AutoConfiguration org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.cloud.autoconfigure.Configuration…
承接前文springcloud情操陶冶-springcloud config server(一),本文将在前文的基础上讲解config server的涉外接口 前话 通过前文笔者得知,cloud config server提供了多种方式的外部源配置获取.当然也暴露了接口供外界调用,通用的方式是通过JMX接口来调用:笔者则比较关注其MVC方式,这也是本文分析的重点 ConfigServerAutoConfiguration 该自动配置类将server所涉及的功能安排的明明白白的.笔者先贴下它的源码…
承接前文springcloud情操陶冶-springcloud config server(二),本文就不讲述server了,就简单阐述下client的应用 前话 config server在引入的时候也依赖config client的JAR包,也就是说本身的配置服务也集成了客户端的功能.在前文的分析中,笔者了解到默认client功能是关闭的.因为在ConfigServerBootstrapApplicationListener指定了spring.cloud.config.enabled=fal…
承接前文springcloud情操陶冶-springcloud context(二),本文将在前文基础上浅析下ConfigServer的工作原理 前话 根据前文得知,bootstrapContext引入了PropertySourceLocator接口供外部源加载配置,但作用是应用于子级ApplicationContext的环境变量Environment上,并不做更新维护操作. 具体的加载与维护更新外部源的配置信息,还是得有ConfigServer来完成,这也是本文分析的重点. 监听器 在这之前,…
承接前文springboot情操陶冶-SpringApplication(一),本文将对run()方法作下详细的解析 SpringApplication#run() main函数经常调用的run()方法是我们分析的关键,先上源码 public ConfigurableApplicationContext run(String... args) { StopWatch stopWatch = new StopWatch(); stopWatch.start(); ConfigurableAppli…
许久之前便听到了springcloud如雷贯耳的大名,但是不曾谋面,其主要应用于微服务的相关架构.笔者对微服务并不是很了解,但其既然比较出众,遂也稍微接触研究下 springcloud特性 springcloud作为spring团队的微服务架构,其有如下的特性(摘自官方文档) Distributed/versioned configuration(分布式/版本化配置) Service registration and discovery(服务注册与发现) Routing(路由) Service-…
承接前文springboot情操陶冶-SpringApplication(二),本文将在前文的基础上分析下@Configuration注解是如何一步一步被解析的 @Configuration 如果要了解与明白@SpringBootApplication的工作机制,必须了解@Configuration的注解应用.因为前者依赖后者,此处看下源码 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Com…
承接前文SpringMVC源码情操陶冶-DispatcherServlet类简析(一),主要讲述初始化的操作,本文将简单介绍springmvc如何处理请求 DispatcherServlet#doDispatch() DispatcherServlet复写父类的doService()方法,其中最主要的处理客户端发的请求便是doDispath()方法,我们只深究此方法,大致上看下其中的逻辑 注释瞧一发 /** * Process the actual dispatching to the hand…
承接前文springboot情操陶冶-web配置(一),在分析mvc的配置之前先了解下其默认的错误界面是如何显示的 404界面 springboot有个比较有趣的配置server.error.whitelabel.enabled,可用来管理404界面的显示方式,是简单的显示还是详细的显示. 指定为false的时候,则会简简单单的显示视图找不到的错误信息,如下 指定为true的时候(默认配置),则会显示前文样例中的错误信息,如下 源码层分析 springboot安排了ErrorMvcAutoCon…
本文对springmvc核心类DispatcherServlet作下简单的向导,方便博主与读者查阅 DispatcherServlet-继承关系 分析DispatcherServlet的继承关系以及主要简析其父类的相关方法,此处可查看 SpringMVC源码情操陶冶-DispatcherServlet父类简析 DispatcherServlet-初始化操作 简析默认的策略加载方式,此处可查看 SpringMVC源码情操陶冶-DispatcherServlet简析(一) DispatcherSer…
承接前文SpringMVC源码情操陶冶-HandlerAdapter适配器简析.RequestMappingHandlerAdapter适配器组件是专门处理RequestMappingHandlerMapping返回的HandlerMethod对象,由此对象返回相应的视图对象或者直接返回数据给客户端 RequestMappingHandlerAdapter的xml配置应用 常用的针对handlerAdapter适配器的配置如下 <mvc:annotation-driven> <!--对直…
承接前文springboot情操陶冶-web配置(二),本文将在前文的基础上分析下mvc的相关应用 MVC简单例子 直接编写一个Controller层的代码,返回格式为json package com.example.demo.web.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import…
前言:本文不讲解FreeMarkerView视图的相关配置,其配置基本由FreeMarkerViewResolver实现,具体可参考>>>SpringMVC源码情操陶冶-ViewResolver视图解析 FreeMarker与springmvc的结合 以xml的bean方式展示如下 <!-- 视图配置 --> <bean id="viewResolver" class="org.springframework.web.servlet.vie…
承接前文Spring源码情操陶冶-AbstractApplicationContext#registerListeners 约定web.xml配置的contextClass为默认值XmlWebApplicationContext 直接源码AbstractRefreshableWebApplicationContext#finishBeanFactoryInitialization /** * Finish the initialization of this context's bean fac…
承接前文Spring源码情操陶冶-AbstractApplicationContext#onRefresh 约定web.xml配置的contextClass为默认值XmlWebApplicationContext 直接源码AbstractRefreshableWebApplicationContext#registerListeners /** * Add beans that implement ApplicationListener as listeners. * Doesn't affec…
承接前文Spring源码情操陶冶-AbstractApplicationContext#initApplicationEventMulticaster 约定web.xml配置的contextClass为默认值XmlWebApplicationContext 直接源码AbstractRefreshableWebApplicationContext#onRefresh /** * Initialize the theme capability. */ protected void onRefresh…
承接前文Spring源码情操陶冶-AbstractApplicationContext#initMessageSource 约定web.xml配置的contextClass为默认值XmlWebApplicationContext 瞧瞧官方注释 /** * Initialize the ApplicationEventMulticaster. * Uses SimpleApplicationEventMulticaster if none defined in the context. * @se…
承接前文Spring源码情操陶冶-AbstractApplicationContext#registerBeanPostProcessors 约定web.xml配置的contextClass为默认值XmlWebApplicationContext 瞧瞧官方注释 /** * Initialize the MessageSource. * Use parent's if none defined in this context. */ 初始化MessageSource消息源,如果beanFactor…
承接前文Spring源码情操陶冶-AbstractApplicationContext#invokeBeanFactoryPostProcessors 瞧瞧官方注释 /** * Instantiate and invoke all registered BeanPostProcessor beans, * respecting explicit order if given. * <p>Must be called before any instantiation of application…
阅读源码有利于陶冶情操,承接前文Spring源码情操陶冶-AbstractApplicationContext#postProcessBeanFactory 约定:web.xml中配置的contextClass为XmlWebApplicationContext 瞧瞧官方注释 /** * Instantiate and invoke all registered BeanFactoryPostProcessor beans, * respecting explicit order if given…
阅读源码有利于陶冶情操,承接前文Spring源码情操陶冶-AbstractApplicationContext#prepareBeanFactory 约定:web.xml中配置的contextClass为XmlWebApplicationContext 瞧瞧官方注释 /** * Modify the application context's internal bean factory after its standard * initialization. All bean definitio…
阅读源码有助于陶冶情操,本文承接Spring源码情操陶冶-AbstractApplicationContext#obtainFreshBeanFactory 瞧瞧官方注释 /** * Configure the factory's standard context characteristics, * such as the context's ClassLoader and post-processors. * @param beanFactory the BeanFactory to con…
前言-阅读源码有利于陶冶情操,本文承接前文Spring源码情操陶冶-AbstractApplicationContext 约束: 本文指定contextClass为默认的XmlWebApplicationContext 从属AbstractApplicationContext#refresh方法 AbstractApplicationContext#obtainFreshBeanFactory 该方法主要完成创建Bean工厂,涉及到解析spring文件,代码清单如下 protected Conf…
前言-阅读源码有利于陶冶情操,本文承接前文Spring源码情操陶冶-ContextLoader 约束:本文指定contextClass为默认的XmlWebApplicationContext AbstractApplicationContext#refresh() 简单看下refresh()方法内罗列的一系列方法,代码清单如下 public void refresh() throws BeansException, IllegalStateException { synchronized (th…
前言-阅读源码有利于陶冶情操,本文承接前文Spring源码情操陶冶-ContextLoaderListener 静态代码块内容 ContextLoader在被主动调用的时候,会执行其的一个静态块,代码如下 static { // Load default strategy implementations from properties file. // This is currently strictly internal and not meant to be customized // by…
前言-阅读源码有利于陶冶情操,本文承接前文Spring源码情操陶冶-AbstractApplicationContext 约束: 本文指定contextClass为默认的XmlWebApplicationContext 从属AbstractApplicationContext#refresh方法 AbstractApplicationContext#prepareRefresh 代码清单如下 protected void prepareRefresh() { //设置刷新开始时间 this.st…
承接前文Spring源码情操陶冶-AbstractApplicationContext#finishBeanFactoryInitialization 约定web.xml配置的contextClass为默认值XmlWebApplicationContext 直接源码AbstractApplicationContext#finishRefresh /** * Finish the refresh of this context, invoking the LifecycleProcessor's…
前言:通过实例结合源码的方式解读,其中涉及到的文件来自于博主的Github毕设项目wxServer Note: Springboot应用不在本文章讨论范围 web.xml中启用Spring 在一般的web应用程序,我们倘若用到Spring的话,需要在web.xml中配置以下的信息来使一些容器,例如Tomcat.Jetty等来加载Spring <context-param> <param-name>contextConfigLocation</param-name> &l…