【mybatis和mybatis-plus】源码分析 官方提供了几个拦截器,我们可以在最前面先添加我们自己的拦截器,在执行的时候会最高优先级执行,如果是作为根模块来封装,可以通过责任链模式来构造一个我们自己的拦截器链,业务项目继承封装的接口即可/*** 查询拦截* @return*//*** 修改拦截* @return*/return 0;
Jenkins结合Gitlab,实现镜像构建及推送 需要修改credentialsId为自己的gitlab凭证、以及推送到镜像仓库的凭证。下面脚本的/home/jenkins目录,需要指定为宿主机的挂载目录。将jenkins生成的webhook地址复制到gitlab中。需要修改url为项目实际gitlab地址。
HopeHomi脚手架(五)远程调用Feign与Sentinel FeignClientsRegistrar实现了ImportBeanDefinitionRegistrar当启动类自动扫描构造beanDefinition的时候,进行beanDefinition注册。
【八】springboot启动源码 - finishRefresh 从IOC获取LifecycleProcessor设置到applicationContext中,如果从IOC中获取不到会创建DefaultLifecycleProcessor并注册到IOC中。调用DefaultLifecycleProcessor的startBeans方法。调用DefaultLifecycleProcessor的onRefresh方法。执行WebServerStartStopLifecycle的start方法。
【springboot】ApplicationListener用法及源码 当执行listener.onApplicationEvent时候,这里的Listener是通过适配器模式,创建的ApplicationListenerMethodAdapter对象。在这里判断event是否是被注册到IOC的Listener监听的对象,返回符合要求的Listener,这里匹配到两个,一个我们自定义,一个spring默认。内部字段有我们自定义的Listener的beanName,method为监听的自定义方法。event为传递事件。获取到监听事件控制器,执行事件处理。
【一】springboot启动源码 - invokeBeanFactoryPostProcessors - (下) 这里用来回调BeanDefinitionRegistryPostProcessors实现类的postProcessBeanFactory方法(该方法属于postProcessBeanFactory接口)遍历所有配置类,并通过cglib进行动态代理, enhancer.enhance(configClass, this.beanClassLoader);创建完代理类,将代理类设置为当前配置类的beanDefinition的beanClass。通过配置环境变量,可以保留cglib创建类的class文件。
【七】springboot启动源码 - finishBeanFactoryInitialization 第252行,transformedBeanName(name),用于返回真实beanName,如果是beanName以&开头(表示factoryBean),去掉&并返回。preInstantiateSingletons方法,遍历beanDefinitionNames,通过mergedBeanDefinitions来获取每一个RootBeanDefinition,并判断他是否是factorybean,如果不是,调用getBean()方法。进入getMergedLocalBeanDefinition方法。
【六】springboot启动源码 - registerListeners 当SpringApplication开始调用run方法,在创建context之后的prepareContext方法中,会将SpringApplication的listeners设置到contextapplicationListeners中。补充说明一下,这里的listeners是基于spring SPI查询到的key为org.springframework.boot.SpringApplicationRunListener的实现类。获取到类名后,通过构造器对这些类进行实例化。
【五】springboot启动源码 - onRefresh 它是通过加载org.springframework.boot.autoconfigure.AutoConfiguration.imports文件,装载ServetWeb的自动配置类ServletWebServerFactoryAutoConfiguration。但是在bdMap中,之前通过自动装配,已经添加了org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration。
【四】springboot启动源码 - initApplicationEventMulticaster 代码也很简单,注册ApplicationEventMulticaster的默认实现类SimpleApplicationEventMulticaster到IOC容器。
【三】springboot启动源码 - initMessageSource 如果IOC容器找不到messageSource的bean,那么会向IOC容器注册一个MessageSource的默认实现类DelegatingMessageSource。这个步骤的代码量比较少。
【二】springboot启动源码 - registerBeanPostProcessors 通过上一步方法invokeBeanFactoryPostProcessors的理解,对于registerBeanPostProcessors,依然是通过PriorityOrdered、Ordered等来注册BeanPostProcessor到beanPostProcessors,为了后面根据顺序执行