没有合适的资源?快使用搜索试试~ 我知道了~
spring核心源码详细解读
资源推荐
资源详情
资源评论
Spring核心源码解析
IOC容器概述
ApplicationContext接口相当于负责bean的初始化、配置和组装的IoC容器.
Spring为ApplicationContext提供了一些开箱即用的实现, 独立的应用可以使用
ClassPathXmlApplicationContext或者FileSystemXmlApplicationContext,web应用在web.xml配置监
听,提供xml位置和org.springframework.web.context.ContextLoaderListener即可初始化
WebApplicationContextIoC容器.
配置元数据
配置元数据配置了应用中实例的实例化、配置以及组装的规则,SpringIoC容器通过此配置进行管理
Bean. 配置元数据有以下几种方式:
基于XML配置: 清晰明了,简单易用
基于Java代码配置:无xml,通过 @Configuration 来声明配置、对象实例化与依赖关系
基于Java注解配置:少量的XML( <context:annotation-config/> ),通过注解声明实例化类与依
赖关系
后续的分析基于XML配置, 与Java代码和注解大体上的机制是一样
实例化容器
实例化容器非常简单,只需要提供本地配置路径或者根据 ApplicationContext 的构造器提供相应的资
源(Spring的另一个重要抽象)即可.
ApplicationContext context = new
ClassPathXmlApplicationContext("application.xml");
refresh()方法的实现代码如下
loadBeanDefinitions:
public void refresh() throws BeansException, IllegalStateException {
synchronized(this.startupShutdownMonitor) {
this.prepareRefresh(); // 准备工作
ConfigurableListableBeanFactory beanFactory =
this.obtainFreshBeanFactory(); // 获取ConfigurableListableBeanFactory最终的目的是
DefaultListableBeanFactory
this.prepareBeanFactory(beanFactory); // 准备bean工厂
try {
this.postProcessBeanFactory(beanFactory); // 一个空的实现,注意这里的
spring版本号为:5.3x
this.invokeBeanFactoryPostProcessors(beanFactory); // 注册bean的工厂
this.registerBeanPostProcessors(beanFactory);
this.initMessageSource(); // Spring 从所有的 @Bean 定义中抽取出来了
BeanPostProcessor,然后都注册进 beanPostProcessors,等待后面的的顺序调用 注册
BeanPostProcessor
this.initApplicationEventMulticaster(); // 初始化事件监听多路广播器
this.onRefresh(); // 一个空的实现
this.registerListeners(); // 注册监听器
this.finishBeanFactoryInitialization(beanFactory); // 到了spring加载流
程最复杂的一步,开始实例化所有的bd
this.finishRefresh();// 刷新完成工作
} catch (BeansException var9) {
if (this.logger.isWarnEnabled()) {
this.logger.warn("Exception encountered during context
initialization - cancelling refresh attempt: " + var9);
}
this.destroyBeans();
this.cancelRefresh(var9);
throw var9;
} finally {
this.resetCommonCaches();
}
}
}
ConfigurableListableBeanFactory beanFactory = this.obtainFreshBeanFactory();
this.refreshBeanFactory();
this.loadBeanDefinitions(beanFactory);
protected void loadBeanDefinitions(DefaultListableBeanFactory beanFactory)
throws BeansException, IOException {
XmlBeanDefinitionReader beanDefinitionReader = new
XmlBeanDefinitionReader(beanFactory);
beanDefinitionReader.setEnvironment(this.getEnvironment());
beanDefinitionReader.setResourceLoader(this);
beanDefinitionReader.setEntityResolver(new ResourceEntityResolver(this));
this.initBeanDefinitionReader(beanDefinitionReader);
SpringBoot核心源码解析
为什么会出现SpringBoot?
市场需要,首先通过对比我们来直观的感受下
1.传统的构建方式
我们沟通SpringMVC+SpringFramework来构建一个web项目,过程如下
创建一个maven-webapp项目
添加jar包依赖
修改web.xml文件
this.loadBeanDefinitions(beanDefinitionReader);
}
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
spring-context
spring-context-support
spring-core
spring-expression
spring-web
spring-webmvc
<context-param><!--配置上下文配置路径-->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!--配置监听器-->
<listener>
<listener-
class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-
class>org.springframework.web.util.IntrospectorCleanupListener</listener-
class>
</listener>
<!--配置Spring MVC的请求拦截-->
<servlet>
剩余14页未读,继续阅读
资源评论
莱克姐姐
- 粉丝: 51
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功