![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
spring
努力的小强
这个作者很懒,什么都没留下…
展开
-
Spring启动流程(十二)——完成刷新
protected void finishRefresh() { // 为上下文初始化生命周期处理器 initLifecycleProcessor(); // 将刷新事件传播到生命周期处理器 getLifecycleProcessor().onRefresh(); // 发布刷新完毕事件到对应的监听器 publishEvent(new ContextRefreshedEvent(this)); // 注册Mbean LiveBeansVi原创 2020-11-02 15:13:18 · 253 阅读 · 1 评论 -
Spring启动流程(十一)——完成初始化
// 完成Context的BeanFactory初始化,并完成所有剩余的单例Bean的初始化protected void finishBeanFactoryInitialization(ConfigurableListableBeanFactory beanFactory) { // 为context上下文初始化conversion service if (beanFactory.containsBean(CONVERSION_SERVICE_BEAN_NAME) &&原创 2020-11-02 14:52:48 · 256 阅读 · 0 评论 -
Spring启动流程(十)——注册事件监听
protected void registerListeners() { // 注册静态指定的监听器 for (ApplicationListener<?> listener : getApplicationListeners()) { getApplicationEventMulticaster().addApplicationListener(listener); } // 从BeanFactory中获取listener的名称,并注册原创 2020-11-02 14:49:58 · 524 阅读 · 0 评论 -
Spring启动流程(九)——初始化主题
protected void onRefresh() throws BeansException { // For subclasses: do nothing by default.}SpringMVC框架主题可以设置应用程序的整体外观,从而增强用户体验。主题是静态资源的集合,通常有css样式表和图片构成,这些css样式和图片会直接影响应用程序的视觉样式。要在Web应用中使用主题,必须实现ThemeSource接口,WebApplicationContext接口就扩展了ThemeSourc原创 2020-11-02 14:32:38 · 310 阅读 · 1 评论 -
Spring启动流程(八)——初始化事件广播
protected void initApplicationEventMulticaster() { ConfigurableListableBeanFactory beanFactory = getBeanFactory(); // 检查配置中是否有applicationEventMulticaster的Bean定义 if (beanFactory.containsLocalBean(APPLICATION_EVENT_MULTICASTER_BEAN_NAME)) {原创 2020-11-02 14:03:58 · 263 阅读 · 0 评论 -
Spring启动流程(七)——初始化消息源
Spring中定义一个MessageSource接口,以用于支持信息的国际化和包含参数的信息的替换。ApplicationContext接口扩展了MessageSource接口,因而提供了消息处理的功能(i18n或者国际化)。与HierarchicalMessageSource一起使用,还能够处理嵌套的消息,这些是Spring提供的处理消息的基本接口。public interface MessageSource { // 用来从MessageSource获取消息的基本方法。如果在指定的locale原创 2020-11-01 22:17:39 · 223 阅读 · 0 评论 -
Spring启动流程(六)——注册后处理器
// 实例化并且注册所有BeanPostProcessorsprotected void registerBeanPostProcessors(ConfigurableListableBeanFactory beanFactory) { PostProcessorRegistrationDelegate.registerBeanPostProcessors(beanFactory, this);}BeanPostProcessorBeanPostProcessor是Spring的Bean工原创 2020-11-01 22:09:23 · 172 阅读 · 0 评论 -
Spring启动流程(五)——调用后处理器
protected void invokeBeanFactoryPostProcessors(ConfigurableListableBeanFactory beanFactory) { PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(beanFactory, getBeanFactoryPostProcessors()); // Detect a LoadTimeWeaver and prepare fo原创 2020-10-30 21:44:13 · 193 阅读 · 0 评论 -
Spring启动流程(四)——BeanFactory后处理
protected void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) { // ServletContextAwareProcessor中拿到应用上下文持有的servletContext引用和servletConfig引用 // 添加ServletContextAwareProcessor后处理器 beanFactory.addBeanPostProcessor(new ServletCo原创 2020-10-30 20:49:54 · 129 阅读 · 0 评论 -
Spring启动流程(三)——准备BeanFactory
这个阶段主要是当Spring获取了BeanFactory之后,还要做些处理工作(配置工厂的上下文),如:上下文的ClassLoader和BeanPostProcessor。protected void prepareBeanFactory(ConfigurableListableBeanFactory beanFactory) { // 内部BeanFactory使用Context上下文的类加载器 beanFactory.setBeanClassLoader(getClassLoader(原创 2020-10-30 10:29:23 · 236 阅读 · 0 评论 -
Spring启动流程(二)——获取BeanFactory
protected ConfigurableListableBeanFactory obtainFreshBeanFactory() { refreshBeanFactory(); ConfigurableListableBeanFactory beanFactory = getBeanFactory(); if (logger.isDebugEnabled()) { logger.debug("Bean factory for " + getDisplayName(原创 2020-10-29 21:24:25 · 1248 阅读 · 0 评论 -
Spring启动流程(一)——准备刷新
protected void prepareRefresh() { // 设置启动时间。当前毫秒数代表当前applicationContext的创建时间 this.startupDate = System.currentTimeMillis(); // 设置容器关闭标志 this.closed.set(false); // 设置启动标志 this.active.set(true); if (logger.isInfoEnabled()) { .原创 2020-10-29 13:29:20 · 177 阅读 · 2 评论 -
Spring启动流程概述
Spring的IoC容器在实现控制反转和依赖注入的过程中,可以划分为两个阶段:容器启动阶段Bean实例化阶段容器初始化加载配置分析配置信息将Bean信息装配到BeanDefinition将Bean信息注册到相应的BeanDefinitionRegistry其他后续处理容器实例化根据策略实例化对象装配依赖Bean初始化前处理对象初始化对象其他处理注册回调接口启动流程源码概览ClassPathXmlApplicationContextpublic ClassPa原创 2020-10-29 11:13:12 · 321 阅读 · 0 评论 -
路径解析和占位符
配置文件路径解析当执行Spring应用程序的时候,首先遇见的就是路径解析问题。关键代码如下:// 设置xml配置文件路径public void setConfigLocations(String... locations) { if (locations != null) { Assert.noNullElements(locations, "Config locations must not be null"); this.configLocations =原创 2020-10-28 14:20:40 · 872 阅读 · 0 评论 -
Spring容器核心类
BeanFactoryBeanFactory为Spring的IoC容器提供了基础功能。它主要被用于与Spring其他部分以及相关的第三方框架集成,并且它的子类实现DefaultListableBeanFactory是更高级别的GenericApplicationContext容器中的关键委托。Spring Bean的创建是典型的工厂模式,这一系列的Bean工厂(即IoC容器)为开发者管理对象的依赖关系提供了很多便利,在Spring中有许多的IoC容器实现供用户选择和使用,其相互关系如下:Defaul原创 2020-10-28 13:49:35 · 126 阅读 · 0 评论 -
认识Spring IOC容器
什么是Spring IoC容器Spring Ioc容器的最主要作用就是:完成对象的创建管理和依赖注入等 。什么是IoCIoC(Inversion of Control,控制反转)是Spring的核心,贯穿始终。所谓IoC,对于spring框架来说,就是由Spring来负责控制对象的生命周期和对象之间的关系。既然提到了IoC,我们就不得不提及设计模式中的六大原则。因为原则之一的“依赖倒置”跟IoC有很大的关系。控制反转(IoC)是DIP(Dependence Inversion Principle,原创 2020-10-26 22:29:47 · 156 阅读 · 0 评论 -
Spring源码环境准备
安装配置Gradle下载GradleSpring是基于Gradle构建的,所以本地需安装Gradle。Gradle是一个基于Groovy的构建工具,它使用Groovy来编写构建脚本,类似Maven支持依赖和多项目构建,但比Maven更加简单轻便。你可以到Gradle官方网站下载。地址:https://gradle.org/releases/配置Gradle环境下载Gradle后解压到你的目录 。如:D:/Develop/Gradle-5.6.2设置环境变量# 以windows为例GRA原创 2020-10-21 22:10:31 · 144 阅读 · 0 评论 -
Spring简介及历史
Spring简介Spring 在起源可以追溯到 Rod Johnson 于2002年出版的《Expert One-to-One J2EE Design and Development》一书 。在这本书中,Rod 展示了他的 interface21 框架,他为自己的应用编写了这一框架。这一框架被发布到开源世界后,组成了现在我们所知的 Spring 框架的基础。Spring 在早期的 beta 和发布备选版本阶段进行得很迅速,第一个正式版本 1.0 在 2004 年 3 月 24 日 发布。Spring 是原创 2020-10-21 21:41:48 · 1889 阅读 · 0 评论