Spring
文章平均质量分 66
每天进步亿点点的小码农
Later equals never
展开
-
Spring中是否可以存在两个相同ID的bean
1、在解析xml文件时,会去校验同一个文件中不能存在相同 ID 的 bean,如果存在,会抛异常2、在解析@Bean注解时,会去校验同一个配置类中如果存在相同名称的 bean,如果存在,先注册的生效,后面的将不注册3、在扫描@Component注解时,会校验名称相同的两个bean中,前一个如果是扫描注册的,且和后一个不是同一个bean,就会抛异常4、前3个校验都是在真正注册之前校验的,如果都通过了,会在真正进行注册的地方通过参数来判断是覆盖还是抛异常。原创 2023-09-26 08:44:39 · 918 阅读 · 0 评论 -
SpringBoot热部署
在 pom.xml 文件中添加 spring-boot-devtools 依赖。这个 key,后面打勾就可以了。在 IDEA 的设置里找到。这样就完成热部署的配置了。原创 2023-08-03 21:30:00 · 154 阅读 · 0 评论 -
Profile多环境配置以及结合Maven如何使用
我们在开发项目的过程中,会遇到需要使用多套环境配置的情况,因为不同环境可能存在不同的配置,比如数据库连接等等,这时候就可以用 profile 来解决。原创 2023-08-02 21:30:00 · 314 阅读 · 0 评论 -
SpringBoot读取配置文件顺序
本文通过源码分析 SpringBoot 加载配置文件目录的顺序,以及 properties、xml、yml、yaml文件的读取顺序。原创 2023-07-30 12:44:36 · 715 阅读 · 0 评论 -
FactoryBean源码解析
是 Spring 框架中的一个接口,用来创建特定类型的 Bean 对象。实现接口就可以自定义 Bean 对象的创建过程。本身也是 Bean,会在 Spring 中经历 Bean 的生命周期,而由创建的 Bean 不经历 Bean 的生命周期。原创 2023-07-19 18:20:01 · 1001 阅读 · 0 评论 -
Spring后置处理器BeanFactoryPostProcessor与BeanPostProcessor源码解析
Spring有两种类型的后置处理器,分别是和,这里再贴出我画的 Spring 启动过程,可以看看这两种后置处理器在 Spring 启动过程中位置。总结一下执行顺序先执行了的方法,按照顺序Ordered> 其他;再执行了的方法;最后执行的方法,按照顺序Ordered> 其他;原创 2023-07-06 21:00:00 · 9898 阅读 · 2 评论 -
@Import注解源码解析
本文将对 Spring 如何处理@Import注解的源码进行解析。原创 2023-07-03 23:15:00 · 222 阅读 · 0 评论 -
SpringBoot自动装配原理
Spring Boot 的自动装配(Auto-configuration)是 Spring Boot 框架中一项强大的功能,它可以根据应用程序的依赖和配置自动完成大部分常见的配置工作,减少了开发者在项目中进行繁琐的手动配置的工作。自动装配其实是通过条件化装配、自动配置类、配置属性绑定来实现的条件化装配:Spring Boot 使用条件化注解()来实现自动装配。这些注解基于运行时环境的条件来决定是否需要装配某个组件。自动配置类:Spring Boot 通过在 classpath 下的。原创 2023-06-27 22:40:35 · 5121 阅读 · 0 评论 -
SpringBoot内置tomcat参数调优,最大连接数、队列长度、最大工作线程数、最小工作线程数
因为看到一道面试题,问SpringBoot默认可以接受的最大并发量是多少,这个问题其实考的是web服务器的配置,因为SpringBoot默认的web服务器是tomcat,于是去了解了一下tomcat的相关配置。原创 2023-05-25 22:41:05 · 2448 阅读 · 1 评论 -
Spring源码学习之RestTemplate
看完源码,我们知道,其实RestTemplate封装了原生的HttpURLConnection,采用Restful的理念,更优雅地来完成对HTTP服务的调用,那么什么是Restful风格,网上看到大神的回答用 URL 定位资源,用 HTTP 动词(GET,POST,DELETE,PUT)描述操作。用URL来指定具体的资源,如图片,文字,或者一个服务;用HTTP动词来描述操作;GET:请求服务器端已经存在的资源,通常将Query String查询条件以键值对的编码形式追加到URL中。原创 2023-04-01 09:17:22 · 411 阅读 · 0 评论 -
Spring源码解析之@PostConstruct注解
1、Spring启动,在registerBeanPostProcessors那一步,实例化并初始化了CommonAnnotationBeanPostProcessor这个BeanPostProcessor,并赋值initAnnotationType为PostConstruct.class;原创 2023-03-26 15:00:00 · 460 阅读 · 1 评论 -
SpringBoot扩展点之ApplicationRunner与CommandLineRunner
在我们的日常开发中会有这样的场景,在容器启动完成之后去做一些事,例如:数据库初始化、缓存预热、启动后检查、任务调度等。SpringBoot给我们提供了两个接口来帮助我们实现这种需求,分别是:ApplicationRunner和 CommandLineRunner。这两个接口的主要区别是参数传递方式不同。ApplicationRunner接口的run()方法有一个ApplicationArguments类型的参数,CommandLineRunner接口的run()方法有一个String数组类型的参数。原创 2023-03-04 09:57:28 · 249 阅读 · 0 评论 -
SpringBoot项目中怎么添加拦截器
在addInterceptors方法中把刚才创建的拦截器添加进去,并设置拦截的路径;(也可以通过excludePathPatterns方法设置排除的路径)创建拦截器配置类,实现WebMvcConfigurer接口,重写addInterceptors方法,并用@Configuration注解标注该类为配置类。创建拦截器类,实现HandlerInterceptor接口,重写preHandle方法,postHandle方法。我们发起请求,可以在控制台得到这样的日志。原创 2023-03-04 09:54:01 · 2026 阅读 · 0 评论 -
@ControllerAdvice注解作用及源码解析
1、@ExceptionHandler注解标注的方法:用于捕获Controller中抛出的不同类型的异常,从而达到异常全局处理的目的;2、@ModelAttribute注解标注的方法:表示此方法会在执行目标Controller方法之前执行;3、@InitBinder注解标注的方法:用于请求中注册自定义参数的解析,从而达到自定义请求参数格式的目的;在我们日常的开发过程中,通常会根据业务定义属于自己的异常,所以通过定制自己的异常处理器,来处理项目中大大小小、各种各样的异常。原创 2023-03-02 18:09:29 · 4750 阅读 · 0 评论 -
SpringMVC源码学习笔记之请求处理流程
核心逻辑是第6行的getHandlerInternal,getHandlerInternal是个模板方法,最终会调用子类实现,这里有两个重要的实现类,分别是AbstractHandlerMethodMapping和AbstractUrlHandlerMapping,上面我们提到HandlerMapper有两个非常主要的实现类:RequestMappingHandlerMapping和BeanNameUrlHandlerMapping,我们看看这两个类的类图。原创 2023-02-18 11:20:30 · 367 阅读 · 0 评论 -
SpringMVC源码学习笔记之DispatcherServlet
在整个SpringMVC框架中,DispatcherServlet处于核心位置,它负责协调和组织不同组件完成请求处理并返回响应工作。DispatcherServlet是SpringMVC统一的入口,所有的请求都通过它。我们先看下DispatcherServlet的类图可以看到DispatcherServlet本质上是一个Servlet,而我们知道Servlet的生命周期是init -> service -> destroy,下面我们看看DispatcherServlet的初始化过程,也就是init方法。原创 2023-02-18 11:07:09 · 115 阅读 · 0 评论 -
Spring源码学习笔记之AOP源码
Spring中的AOP其实是通过动态代理来实现的,在bean的后置处理时,通过AnnotationAwareAspectJAutoProxyCreator这个后置处理器来生成代理类1、在容器刷新过程中的invokeBeanFactoryPostProcessors方法里把AnnotationAwareAspectJAutoProxyCreator注册到beanDefinitionMap里;2、在容器刷新过程中的registerBeanPostProcessors方法里完成了初始化;原创 2023-02-18 10:45:14 · 126 阅读 · 0 评论 -
Spring源码学习笔记(十三)、finishRefresh
/ 最后一步,完成刷新最后一步,完成刷新清理缓存资源初始化lifecycleProcessor,默认是DefaultLifecycleProcessor触发DefaultLifecycleProcessor的onRefresh方法发布事件ContextRefreshedEvent注册ApplicationContext到LiveBeansView内部的applicationContexts中。原创 2023-02-11 18:46:05 · 111 阅读 · 0 评论 -
Spring源码学习笔记(十二)、finishBeanFactoryInitialization
/ 初始化所有的singleton beans(lazy-init的除外)初始化所有的singleton beans(lazy-init的除外)原创 2023-02-10 10:28:05 · 326 阅读 · 0 评论 -
Spring源码学习笔记(十一)、registerListeners
/ 注册监听器注册监听器获取所有的监听器,并绑定到广播器获取监听器的名称,绑定到广播器如果存在早期应用事件,直接广播出去。原创 2023-02-10 10:24:42 · 94 阅读 · 0 评论 -
Spring源码学习笔记(十)、onRefresh
/ 初始化特定上下文子类中的其他特殊bean。初始化特定上下文子类中的其他特殊bean。这是个模板方法,实现是空的,交由子类实现,我们看下其子类ServletWebServerApplicationContext的实现,借此可以看看Springboot项目是如何自动启动tomcat的。原创 2023-02-10 10:21:46 · 137 阅读 · 0 评论 -
Spring源码学习笔记(九)、initApplicationEventMulticaster
/ 初始化事件多播器初始化事件多播器。原创 2023-02-10 10:09:50 · 152 阅读 · 0 评论 -
Spring源码学习笔记(八)、initMessageSource
/ 加载messageSource,加载messageSource, messageSource是用来处理国际化的。原创 2023-02-10 10:03:06 · 164 阅读 · 0 评论 -
Spring源码学习笔记(七)、registerBeanPostProcessors
/ 注册拦截bean创建的bean处理器。注册拦截bean创建的bean处理器。在bean实例化前注册并实例化所有的BeanPostProcessor。原创 2023-02-10 09:52:05 · 123 阅读 · 0 评论 -
Spring源码学习笔记(六)、invokeBeanFactoryPostProcessors
/ 调用注册的BeanFactory的后置处理器调用注册的BeanFactory的后置处理器。原创 2023-02-10 09:46:54 · 86 阅读 · 0 评论 -
Spring源码学习笔记(五)、postProcessBeanFactory
/ 允许在上下文子类中对bean工厂进行后处理, 相当于beanFactory的后置处理器Spring中并没有具体去实现postProcessBeanFactory方法,相当于定义了一个模板方法,提供给想要实现BeanPostProcessor的三方框架使用的。谁要使用谁就去实现。作用是在BeanFactory准备工作完成后做一些定制化的处理,一般结合BeanPostProcessor接口的实现类一起使用,注入一些重要资源(类似Application的属性和ServletContext的属性)。原创 2023-02-10 09:43:24 · 327 阅读 · 0 评论 -
Spring源码学习笔记(四)、prepareBeanFactory
/ 准备bean工厂,初始化bean工厂,给bean工厂设置属性值准备bean工厂,初始化bean工厂,给bean工厂设置属性值,主要包含如下的操作:设置BeanFactory的类加载器设置BeanExpressionResolver添加ResourceEditorRegistrar添加ApplicationContextAwareProcessor忽略一些依赖接口设置几个自动装配的特殊规则添加ApplicationListenerDetector增加对AspectJ的支持。原创 2023-02-10 09:38:35 · 125 阅读 · 0 评论 -
Spring源码学习笔记(三)、obtainFreshBeanFactory
/ 告诉子类刷新内部bean工厂获得一个刷新后的bean工厂,返回一个ConfigurableListableBeanFactory对象,主要包含如下的操作:如果bean工厂了,就销毁掉,关闭掉创建一个新的bean工厂设置序列化id和两个属性加载BeanDefinition(解析xml中的bean,封装成BeanDefinition,放置到beanDefinition的map中)(重点!!!原创 2023-02-10 09:29:49 · 149 阅读 · 0 评论 -
Spring源码学习笔记(二)、prepareRefresh
/ 准备刷新该方法就想它的名字一样,在正式的刷新之前做一些准备工作,主要包含如下的操作:记录开始时间设置closed、active标识记录日志初始化属性资源创建环境对象校验必要的属性初始化earlyApplicationEvents。原创 2023-02-09 17:26:36 · 123 阅读 · 0 评论 -
Spring源码学习笔记(一)、refresh
之后会对其中的12个方法逐个深入了解。原创 2023-02-09 16:13:39 · 77 阅读 · 0 评论 -
Spring容器的启动过程,Bean的生命周期
下图展示bean的一些属性。原创 2023-01-28 15:57:58 · 140 阅读 · 0 评论