![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
spring源码
文章平均质量分 88
小雨的光
这个作者很懒,什么都没留下…
展开
-
RestTemplate工作原理及拦截器的使用
RestTemplate的使用new RestTemplate().getForObject("http://www.baidu.com", String.class);源码分析getForObject()方法源码: @Override @Nullable public <T> T getForObject(String url, Class<T> responseType, Object... uriVariables) throws RestClientExcept原创 2020-06-24 15:56:50 · 1721 阅读 · 0 评论 -
AutowiredAnnotationBeanPostProcessor工作原理
SpringBoot中不需要再使用PropertyPlaceholderConfigurer来注入属性了,而是用@Value等注解替换了。@Value注解的解析和@Autowired注解用了同一套逻辑。所以,我们一起通过分析@Autowired注解的解析过程来理解@Autowired和@Value的工作原理。代码分析@Autowired注解工作原理@Autowired注解是由AutowiredAnnotationBeanPostProcessor类来解析的,它的类声明如下:public class原创 2020-06-24 14:56:57 · 2484 阅读 · 0 评论 -
PropertyPlaceholderConfigurer工作原理
类继承关系代码分析PropertiesLoaderSupport类是一个抽象类,定义了一些基础性的操作,可以从声明的方法上看出来:往下走,就看出东西来了。PropertyResourceConfigurer类是非常重要的一环,类声明如下:public abstract class PropertyResourceConfigurer extends PropertiesLoaderSupport implements BeanFactoryPostProcessor, PriorityOrd原创 2020-06-23 11:40:42 · 580 阅读 · 0 评论 -
BeanWrapper的使用
@Componentpublic class AppBoot implements CommandLineRunner { private String id; @Override public void run(String... args) throws Exception { BeanWrapper bw = PropertyAccessorFactory.forBeanPropertyAccess(this); bw.setPropertyValue("id", "111111.原创 2020-06-22 15:30:12 · 479 阅读 · 0 评论 -
Spring源码--finishBeanFactoryInitialization方法
1.AbstractApplicationContext类的finishBeanFactoryInitialization()方法 protected void finishBeanFactoryInitialization(ConfigurableListableBeanFactory beanFactory) { //判断BeanFactory中是否存在名称为“conv...原创 2018-09-30 16:26:15 · 1376 阅读 · 0 评论 -
SpringMVC源码--WebApplicationInitializer(没有XML怎么在Web环境中启动Spring容器)
一直有好奇Spring是怎样做到零XML完成Spring在Web容器中启动的,这篇文章主要介绍WebApplicationInitializer接口。作为本篇的主角, WebApplicationInitializer接口位于org.springframework.web包下。很简单,只有一个方法:public interface WebApplicationInitializer ...原创 2018-10-16 10:48:34 · 1502 阅读 · 0 评论 -
SpringMVC源码--控制器Handler到底是个什么?
相信看了前边的文章,心理总是会有一些困惑。控制器Handler到底是个什么呢?首先我们可以确定的是它是一个Object对象。其次,它允许是String类型,允许是Spring Bean,允许是HandlerExecutionChain。到底是什么,取决于处于哪个阶段。 源码中第一次出现handler是在AbstractHandlerMapping类的getHandler()方...原创 2018-10-10 11:09:26 · 12905 阅读 · 4 评论 -
SpringMVC源码--拦截器实现机制
前言 如果框架源码看多了,就会发现一个问题,AOP的思想是存在于整个框架思想的。无论是Spring,还是SpringMVC,或者Mybatis、Hibernate。为什么呢?因为AOP的存在让我们更好地去控制程序走向,而且不用人为的编写大量重复性代码。比如一个简单的权限认证,我们肯定不希望在每个用户请求抵达服务器时都需要在业务功能中加入重复性的权限验证代码。无疑,对所有的请求进行拦截,...原创 2018-10-10 15:00:06 · 954 阅读 · 0 评论 -
SpringBoot源码---启动流程分析
既然看到这篇文章了,那么默认读者已经很熟悉SpringBoot的使用的。 第一步,启动一个SpringBoot应用:@ComponentScan(basePackages = {""})@MapperScan("")@SpringBootApplicationpublic class StartApp { public static void main(String[] ...原创 2018-10-22 13:35:16 · 466 阅读 · 0 评论 -
Spring源码---组合注解/合并注解的问题
我想,每个开发人员都应该有过这样的经历:在编写某个类或接口的时候,需要声明Spring本身的注解(@Controller、@Service,@Dao),又需要声明自己公司编写的注解来完成公司的独特业务,然后就悲剧了,一个类上边声明了五六个注解,茫茫然不知所云。注解本身是好的,它可以替我们完成一些事情。但和XML一样,过度使用就编程了一种灾难。 于是,一种新的替代方案出现了,...原创 2018-10-31 10:09:30 · 11012 阅读 · 6 评论 -
Spring源码--registerBeanPostProcessors方法
1.AbstractApplicationContext的registerBeanPostProcessors()方法 protected void registerBeanPostProcessors(ConfigurableListableBeanFactory beanFactory) { PostProcessorRegistrationDelegate.regi...原创 2018-09-30 14:52:02 · 678 阅读 · 0 评论 -
Spring源码--invokeBeanFactoryPostProcessors方法
1.AbstractApplicationContext类的invokeBeanFactoryPostProcessors()方法 protected void invokeBeanFactoryPostProcessors(ConfigurableListableBeanFactory beanFactory) { PostProcessorRegistratio...原创 2018-09-30 14:44:37 · 798 阅读 · 0 评论 -
SpringMVC源码--DispatcherServlet的工作原理
Servlet接口中很重要的三个方法分别是:init()方法负责初始化、destroy()方法负责销毁、service()方法负责处理请求。上一篇文章中我们提到,DispatcherServlet是一个具有唯一性的增强型Servlet容器。这篇文章主要是介绍DispatcherServlet的service()方法的,它是springmvc的核心。 老规矩,先从入口开始介绍。首先,...原创 2018-10-08 16:10:23 · 267 阅读 · 0 评论 -
SpringMVC源码--控制器Handler的注册
Spring容器初始化过程中,在调用prepareBeanFactory方法时,会调用所有实现了ApplicationContextAware接口的子类方法setApplicationContext()方法注入ApplicationContext对象。ApplicationObjectSupport类是ApplicationContextAware接口的子类,它的setApplicatio...原创 2018-10-08 17:27:04 · 581 阅读 · 0 评论 -
Spring源码--两种启动方式
一. 通过编码方式启动Spring1. 通过FileSystemXmlApplicationContext启动spring容器public FileSystemXmlApplicationContext(String[] configLocations, boolean refresh, ApplicationContext parent) throws Beans...原创 2018-09-30 09:14:26 · 3739 阅读 · 0 评论 -
Spring源码--AbstractApplicationContext的refresh()方法
一. 先上源码为敬 public void refresh() throws BeansException, IllegalStateException { //刷新前的预处理 prepareRefresh(); // 获取BeanFactory ConfigurableListableB...原创 2018-09-30 10:00:37 · 490 阅读 · 0 评论 -
SpringMVC源码--控制器Handler的获得
在SpringMVC源码--DispatcherServlet的加载和初始化这篇文章中,我们在解读DispatcherServlet作用流程的时候,最后走到了DispatcherServlet类的doDispatch方法。源码如下:protected void doDispatch(HttpServletRequest request, HttpServletResponse resp...原创 2018-10-09 09:53:58 · 285 阅读 · 0 评论 -
SpringMVC源码--控制器Handler处理请求过程
DispatcherServlet类的doDispatch()方法中,真正去处理请求的关键步骤是: HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler()); ModelAndView mv = ha.handle(processedRequest, respo...原创 2018-10-09 10:43:05 · 530 阅读 · 0 评论 -
Spring源码--obtainFreshBeanFactory方法
1.位于AbstractApplicationContext类的obtainFreshBeanFactory()方法 protected ConfigurableListableBeanFactory obtainFreshBeanFactory() { refreshBeanFactory(); ConfigurableListableBeanFacto...原创 2018-09-30 11:15:59 · 229 阅读 · 0 评论 -
Spring源码--prepareBeanFactory方法
protected void prepareBeanFactory(ConfigurableListableBeanFactory beanFactory) { //设置类加载器:存在则直接设置/不存在则新建一个默认类加载器 beanFactory.setBeanClassLoader(getClassLoader()); //设置EL表达式解析器...原创 2018-09-30 11:38:47 · 3770 阅读 · 0 评论 -
Spring源码--postProcessBeanFactory方法
写在前面的话: spring中并没有具体去实现postProcessBeanFactory方法,是提供给想要实现BeanPostProcessor的三方框架使用的。谁要使用谁就去实现。作用是在BeanFactory准备工作完成后做一些定制化的处理,一般结合BeanPostProcessor接口的实现类一起使用,注入一些重要资源(类似Application的属性和ServletCon...原创 2018-09-30 14:10:19 · 11300 阅读 · 0 评论 -
SpringMVC源码--DispatcherServlet的加载和初始化
之前的文章介绍了Spring的初始化过程,Spring Web应用初始化依赖于Web容器的初始化,这在之前已经提到过了。那么初始化完成后,SpringMVC又是怎样发挥作用的呢?首先呢,Web容器初始化完成后会继续读取web.xml里的节点,我们知道DispatcherServlet是配置在web.xml中的,所以DispatcherServlet是由Web容器主动去加载的。那么,Disp...原创 2018-10-08 14:44:22 · 432 阅读 · 0 评论