
Spring源码解析
文章平均质量分 92
Mutou_ren
这个作者很懒,什么都没留下…
展开
-
Spring根据配置文件解析占位符
背景在Spring中,使用${user.name}的形式,能够自动从配置文件中读取user.name的值进行替换。原理PropertyResolver该接口的作用是解析属性值,提供了一系列获取属性以及解析属性的方法。其中resolvePlaceholders(String text)和resolveRequiredPlaceholders(String text)提供了解析占位符${}属性解析的功能。从继承图可以看出,我们熟知的StandardEnvironment也是一个PropertyR原创 2020-12-09 15:13:26 · 694 阅读 · 0 评论 -
ServletContainerInitializer及WebApplicationInitializer
ServletContainerInitializer即Servlet容器初始化组件,用来初始化Servlet容器。如注册Servlet、注册过滤器等。public interface ServletContainerInitializer { /** * Receives notification during startup of a web application of...原创 2020-02-09 20:57:00 · 495 阅读 · 0 评论 -
SpringBoot的内置Tomcat是如何启动的?
整体流程我们知道SpringApplication.run()时会创建根据推断的环境创建对应的应用上下文protected ConfigurableApplicationContext createApplicationContext() { Class<?> contextClass = this.applicationContextClass; if (contextC...原创 2020-02-09 15:37:22 · 701 阅读 · 0 评论 -
SpringMVC的入参转换和响应参数转换
在上一篇文章中讲了大概的执行流程,这里详细讲一下入参转换和响应转换的实现原理入参转换和响应转换的流程都是在通过Adapter调用HandlerMethod时发生的。如下是请求头设置,SpringMVC会根据content-type和accept类型选择合适的HttpMessageConverter来进行消息的转换参数转化private Object[] getMethodArgument...原创 2020-01-24 15:03:33 · 1175 阅读 · 0 评论 -
SpringMVC的请求响应流程及参数类型自动转换
纵观全局我们先进入DIspatchServlet.doDispatch(),我们分析其调用过程的主要方法如下:// 根据请求拿到具体的处理器方法HandlerMethod并获取拦截器包装成HandlerExecutionChainmappedHandler = getHandler(processedRequest);// 根据HandlerMethod得到对应的HandlerAdapte...原创 2020-01-23 22:35:21 · 627 阅读 · 0 评论 -
SpringBoot是如何进行自动装配的
自动装配在没有SpringBoot的时代,当我们需要引入一个额外的依赖如Redis时,我们要在配置文件中做一系列的配置才能使用,而在SpringBoot的自动装配中,我们只需要引入starter包然后使用一个@EnableCache注解即可使用。SpringBoot是如何做到的呢?我们知道,当我们在启动Spring应用时,我们需要为Spring提供配置信息(XML或Configuration)...原创 2020-01-23 17:00:19 · 1034 阅读 · 0 评论 -
SpringApplication.run到底发生了什么?
以下代码为SpringBoot应用的启动类的代码,相信每个人都见过太多次这个启动类了,main方法中只有一行代码,这行代码到底发生了什么?public class ApiApplication { public static void main(String[] args) { SpringApplication.run(ApiApplication.class, arg...原创 2020-01-22 19:14:18 · 552 阅读 · 0 评论 -
ignoreDependencyType和ignoreDependencyInterface
作用在自动注入中(不是@Autowire,是default-autowire)ignoreDependencyType指定类型如User.classClass Account { // 不会被自动注入,User类型已经被自动注入忽略 User user;}ignoreDependencyInterface指定接口如Collection.classClass Account im...原创 2019-12-05 22:45:04 · 333 阅读 · 0 评论 -
SpringIOC源码解析(二)
资源加载从xml中读取bean定义从上篇文章我们知道,Spring的启动过程是先创建一个IOC容器ApplicationContext,在从xml中读取bean的定义BeanDefinition,代码如下:ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");我们通过Idea来绘制出Cl...原创 2019-09-01 17:24:00 · 195 阅读 · 0 评论