SpringBoot
文章平均质量分 81
SpringBoot
槑!
这个作者很懒,什么都没留下…
展开
-
【SpringBoot】内嵌 Web 服务器原理:源码流程
1.内嵌Tomcat–jar包启动原理内嵌 tomcat 的启动流程大致如下:org.springframework.boot.SpringApplication#refreshContextorg.springframework.context.support.AbstractApplicationContext#refreshorg.springframework.boot.web.servlet.context.ServletWebServerApplicationContext#onRef原创 2021-03-01 21:42:40 · 721 阅读 · 0 评论 -
【SpringBoot】启动原理(三):run 方法解析
run(String… args)解析1.run函数/*** Run the Spring application, creating and refreshing a new ApplicationContext*/public ConfigurableApplicationContext run(String... args) { //计时器 StopWatch stopWatch = new StopWatch(); stopWatch.start(); Conf原创 2021-03-01 21:42:24 · 799 阅读 · 1 评论 -
【SpringBoot】启动原理(二):构造 SpringApplication
进入SpringApplicationpublic static ConfigurableApplicationContext run(Class<?>[] primarySources, String[] args) { return new SpringApplication(primarySources).run(args);}我们根据DemoApplication跟进代码,发现其调用的SpringApplication类的run方法。这个方法就干了2件事:一原创 2021-03-01 21:42:03 · 74 阅读 · 0 评论 -
【SpringBoot】启动原理(一):Jar 启动实现
概述Spring Boot 提供了 Maven 插件 spring-boot-maven-plugin,可以方便的将 Spring Boot 项目打成 jar 包或者 war 包。考虑到部署的便利性,我们绝大多数 99.99% 的场景下,我们会选择打成 jar 包。这样,我们就无需在部署项目的服务器上,配置相应的 Tomcat、Jetty 等 Servlet 容器。下面,我们来打开一个 Spring Boot jar 包,看看其里面的结构。如下图所示,一共分成四部分:Spring Boot ja原创 2021-03-01 21:41:46 · 868 阅读 · 1 评论 -
【SpringBoot】自动装配原理(三):ConfigurationClassBeanDefinitionReader 过滤条件注解
条件注解条件注解是Spring4提供的一种bean加载特性,主要用于控制配置类和bean初始化条件。在springBoot,springCloud一系列框架底层源码中,条件注解的使用到处可见。不少人在使用@ConditionalOnBean注解时会遇到不生效的情况,依赖的 bean 明明已经配置了,但就是不生效。到底@ConditionalOnBean和bean加载的顺序有没有关系呢?跟着源码,一探究竟。问题演示:@Configurationpublic class Configuration1原创 2021-03-01 21:41:32 · 479 阅读 · 2 评论 -
【SpringBoot】自动装配原理(二):AutoConfigurationImportSelector 的 selectImports
AutoConfigurationImportSelector该类实现ImportSelector接口,最重要的是实现selectImports方法,该方法的起到的作用是,根据配置文件(spring.factories),将需要注入到容器的bean注入到容器。selectImports public String[] selectImports(AnnotationMetadata annotationMetadata) { if (!isEnabled(annotationMetadata))原创 2021-03-01 21:41:10 · 3343 阅读 · 5 评论 -
【SpringBoot】自动装配原理(一):AutoConfigrationImportSelector 回调流程
自动装配自动装配功能总体来说由 @EnableXXX注解 + @Import再配合@Conditional注解可以实现条件自动装配在SpringBoot中核心注解为@EnableAutoConfiguration@EnableAutoConfiguration通常情况下,springBoot应用启动类不会直接标注此注解,而是通过@SpringBootApplication注解来实现:发现 @SpringBootApplication中包含了 @SpringBootConfiguration原创 2021-03-01 21:40:51 · 884 阅读 · 0 评论 -
【SpringBoot】如何实现自定 starter
Starter是Spring Boot中的一个非常重要的概念,Starter 相当于模块,它能将模块所需的依赖整合起来并对模块内的Bean根据环境(条件)进行自动配置。使用者只需要依赖相应功能的Starter,无需做过多的配置和依赖,Spring Boot就能自动扫描并加载相应的模块。比如我们在Maven的依赖中加入spring-bootstarter-web 就能使项目支持 Spring MVC,并且 Spring Boot 还为我们做了很多默认配置,无需再依赖spring-web、 spring-we原创 2021-03-01 21:40:15 · 173 阅读 · 0 评论 -
Spring 注解驱动原理(四):使用 annotatedClass 构造之 ConfigurationClassPostProcessor
入参为 ConfigureClass 之 ConfigurationClassPostProcessor 处理postProcessBeanDefinitionRegistry() public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) { int registryId = System.identityHashCode(registry); if (this.regis原创 2021-02-28 18:51:27 · 244 阅读 · 2 评论 -
Spring 注解驱动原理(三):使用 annotatedClass 构造之注册配置类
入参为 ConfigureClass当创建注解处理容器时,如果传入的初始参数是具体的注解Bean定义类时,注解容器读取并注册。AnnotationConfigApplicationContext 通过调用注解Bean定义读取器AnnotatedBeanDefinitionReader 的 register() 方法向容器注册指定的注解Bean,注解Bean定义读取器向容器注册注解Bean的源码如下:// 注册多个注解Bean定义类public void register(Class<?>原创 2021-02-28 00:55:13 · 540 阅读 · 0 评论 -
Spring 注解驱动原理(二):使用 basePackages 构造
入参为 basePackages先看调用时序图:public AnnotationConfigApplicationContext(String... basePackages) { this(); scan(basePackages); refresh();}Spring启动时,会去扫描指定包下的文件。public void scan(String... basePackages) { Assert.notEmpty(basePackages, "At least原创 2021-02-28 00:55:01 · 3503 阅读 · 0 评论 -
Spring 注解驱动原理(一):AnnotationConfigApplicationContext 两类构造方法
SpringIOC 容器对于类级别的注解和类内部的注解分以下两种处理策略:类级别的注解:如@Component、@Repository、@Controller、@Service 以及 JavaEE6 的 @ManagedBean和@Named 注解,都是添加在类上面的类级别注解,Spring容器根据注解的过滤规则扫描读取注解Bean定义类,并将其注册到Spring IOC 容器中。类内部的注解:如@Autowire、@Value、@Resource以及EJB 和 WebService 相关的注解等,都原创 2021-02-28 00:54:51 · 841 阅读 · 3 评论