Spring Boot启动原理解析(注解篇)

编程自学指南:java程序设计开发,设计思想Spring开源框架-SpringBoot原理与实战之常用注解 @SpringBootApplication学习笔记 编程自学指南:java程序设计开发,设计思想Spring开源框架-SpringBoot原理与实战之常用注解 @SpringBootApplication学习笔记,Spring Boot 中的注解是开发过程中的重要工具,它们可以帮助开发者快速搭建应用、注册组件、进行依赖注入和处理 HTTP 请求。通过合理使用这些注解,可以提高开发效率,使代码更加简洁和易于维护。在实际开发中,要根据具体的需求选择合适的注解,并深入理解其原理和使用方法。 阅读详情

SpringBoot内置的自动配置使开发变得很方便,所以这次就来看看它的启动源码和它的自动化配置的实现原理。

    启动类:

 
  1. @SpringBootApplication

  2. public class DemoApplication {

  3.  
  4. public static void main(String[] args) {

  5. SpringApplication.run(DemoApplication.class, args);

  6. }

  7. }

    可以看到这个启动类中有两部分:@SpringBootApplication和SpringApplication.run(DemoApplication.class, args)两部分。每个Spring Boot项目都包含这两部分。

@SpringBootApplication

 
  1. @Target(ElementType.TYPE) // 注解的适用范围,TYPE用于描述类、接口、enum声明

  2. @Retention(RetentionPolicy.RUNTIME) // 注解的生命周期

  3. @Documented // 表明这个注解应该被javadoc记录

  4. @Inherited // 子类可以继承该注解

  5. @SpringBootConfiguration // 继承了Configuration,表示当前是注解类

  6. @EnableAutoConfiguration // 开启SpringBoot的注解功能,借助@import的帮助

  7. @ComponentScan(excludeFilters = { // 包扫描路径设置

  8. @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),

  9. @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })

  10. public @interface SpringBootApplication {

  11. ……

  12. }

这块最重要的三个注解是:

  • @Configuration:IoC容器的配置类(@SpringBootConfiguration内部有@Configuration)
  • @EnableAutoConfiguration:借助@Import的支持,将所有符合自动配置条件的bean定义加载到IoC容器。
  • @ComponentScan:自动扫描并加载符合条件的组件或者bean,最终将这些bean加载到IoC容器中

 这里主要研究下@EnableAutoConfiguration注解:

 
  1. @Target(ElementType.TYPE)

  2. @Retention(RetentionPolicy.RUNTIME)

  3. @Documented

  4. @Inherited

  5. @AutoConfigurationPackage

  6. @Import(AutoConfigurationImportSelector.class)

  7. public @interface EnableAutoConfiguration {

  8.  
  9. String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";

  10.  
  11. ……

  12.  
  13. }

这个注解主要有两个注解组成:

  • @AutoConfigurationPackage:返回了当前主程序类的同级以及子级的包组件。
  • @Import(AutoConfigurationImportSelector.class):导入自动配置的组件

 先来看看@AutoConfigurationPackage的实现:

 
  1. @Target(ElementType.TYPE)

  2. @Retention(RetentionPolicy.RUNTIME)

  3. @Documented

  4. @Inherited

  5. @Import(AutoConfigurationPackages.Registrar.class)

  6. public @interface AutoConfigurationPackage {

  7.  
  8. }

  9.  
  10.  
  11. static class Registrar implements ImportBeanDefinitionRegistrar, DeterminableImports {

  12.  
  13. @Override

  14. public void registerBeanDefinitions(AnnotationMetadata metadata,

  15. BeanDefinitionRegistry registry) {

  16. register(registry, new PackageImport(metadata).getPackageName());

  17. }

  18.  
  19. @Override

  20. public Set<Object> determineImports(AnnotationMetadata metadata) {

  21. return Collections.singleton(new PackageImport(metadata));

  22. }

  23.  
  24. }

    它其实是注册了一个Bean的定义。new PackageImport(metadata).getPackageName(),它会返回当前主程序类的同级以及子级的包组件。

   这就是为什么要把主程序放在项目的顶层节点的原因。

下面再来看看@Import(AutoConfigurationImportSelector.class)的作用:

 
  1. public String[] selectImports(AnnotationMetadata annotationMetadata) {

  2. if (!isEnabled(annotationMetadata)) {

  3. return NO_IMPORTS;

  4. }

  5. AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader

  6. .loadMetadata(this.beanClassLoader);

  7. AnnotationAttributes attributes = getAttributes(annotationMetadata);

  8. List<String> configurations = getCandidateConfigurations(annotationMetadata,

  9. attributes);

  10. configurations = removeDuplicates(configurations);

  11. Set<String> exclusions = getExclusions(annotationMetadata, attributes);

  12. checkExcludedClasses(configurations, exclusions);

  13. configurations.removeAll(exclusions);

  14. configurations = filter(configurations, autoConfigurationMetadata);

  15. fireAutoConfigurationImportEvents(configurations, exclusions);

  16. return StringUtils.toStringArray(configurations);

  17. }

  18.  
  19.  
  20.  
  21. protected List<String> getCandidateConfigurations(AnnotationMetadata metadata,

  22. AnnotationAttributes attributes) {

  23. List<String> configurations = SpringFactoriesLoader.loadFactoryNames(

  24. getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader());

  25. Assert.notEmpty(configurations,

  26. "No auto configuration classes found in META-INF/spring.factories. If you "

  27. + "are using a custom packaging, make sure that file is correct.");

  28. return configurations;

  29. }

  30.  
  31.  
  32.  
  33. public static List<String> loadFactoryNames(Class<?> factoryClass, @Nullable ClassLoader classLoader) {

  34. String factoryClassName = factoryClass.getName();

  35. return loadSpringFactories(classLoader).getOrDefault(factoryClassName, Collections.emptyList());

  36. }

  37.  
  38.  
  39.  
  40. private static Map<String, List<String>> loadSpringFactories(@Nullable ClassLoader classLoader) {

  41. MultiValueMap<String, String> result = cache.get(classLoader);

  42. if (result != null) {

  43. return result;

  44. }

  45.  
  46. try {

  47. Enumeration<URL> urls = (classLoader != null ?

  48. classLoader.getResources(FACTORIES_RESOURCE_LOCATION) :

  49. ClassLoader.getSystemResources(FACTORIES_RESOURCE_LOCATION));

  50. result = new LinkedMultiValueMap<>();

  51. while (urls.hasMoreElements()) {

  52. URL url = urls.nextElement();

  53. UrlResource resource = new UrlResource(url);

  54. Properties properties = PropertiesLoaderUtils.loadProperties(resource);

  55. for (Map.Entry<?, ?> entry : properties.entrySet()) {

  56. List<String> factoryClassNames = Arrays.asList(

  57. StringUtils.commaDelimitedListToStringArray((String) entry.getValue()));

  58. result.addAll((String) entry.getKey(), factoryClassNames);

  59. }

  60. }

  61. cache.put(classLoader, result);

  62. return result;

  63. }

  64. catch (IOException ex) {

  65. throw new IllegalArgumentException("Unable to load factories from location [" +

  66. FACTORIES_RESOURCE_LOCATION + "]", ex);

  67. }

  68. }

 

    可以看到它会从spring-boot-autoconfigure/2.0.2.RELEASE/spring-boot-autoconfigure-2.0.2.RELEASE.jar!/META-INF/spring.factories中去获取自动配置类,然后根据反射将其实例化为JavaConfig形式的IoC容器配置类,然后将其加载到IoC容器中。

 
  1. org.springframework.boot.autoconfigure.EnableAutoConfiguration=\

  2. org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\

  3. org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\

  4. org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\

  5. org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\

  6. org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\

  7. org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\

  8. org.springframework.boot.autoconfigure.cloud.CloudAutoConfiguration,\

  9. org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,\

  10. org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration,\

  11. org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration,\

  12. org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration,\

  13. org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration,\

  14. org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration,\

  15. org.springframework.boot.autoconfigure.data.cassandra.CassandraReactiveDataAutoConfiguration,\

  16. org.springframework.boot.autoconfigure.data.cassandra.CassandraReactiveRepositoriesAutoConfiguration,\

  17. org.springframework.boot.autoconfigure.data.cassandra.CassandraRepositoriesAutoConfiguration,\

  18. org.springframework.boot.autoconfigure.data.couchbase.CouchbaseDataAutoConfiguration,\

  19. org.springframework.boot.autoconfigure.data.couchbase.CouchbaseReactiveDataAutoConfiguration,\

  20. org.springframework.boot.autoconfigure.data.couchbase.CouchbaseReactiveRepositoriesAutoConfiguration,\

  21. org.springframework.boot.autoconfigure.data.couchbase.CouchbaseRepositoriesAutoConfiguration,\

  22. org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration,\

  23. org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration,\

  24. org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration,\

  25. org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration,\

  26. org.springframework.boot.autoconfigure.data.ldap.LdapDataAutoConfiguration,\

  27. org.springframework.boot.autoconfigure.data.ldap.LdapRepositoriesAutoConfiguration,\

  28. org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration,\

  29. org.springframework.boot.autoconfigure.data.mongo.MongoReactiveDataAutoConfiguration,\

  30. org.springframework.boot.autoconfigure.data.mongo.MongoReactiveRepositoriesAutoConfiguration,\

  31. org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration,\

  32. org.springframework.boot.autoconfigure.data.neo4j.Neo4jDataAutoConfiguration,\

  33. org.springframework.boot.autoconfigure.data.neo4j.Neo4jRepositoriesAutoConfiguration,\

  34. org.springframework.boot.autoconfigure.data.solr.SolrRepositoriesAutoConfiguration,\

  35. org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration,\

  36. org.springframework.boot.autoconfigure.data.redis.RedisReactiveAutoConfiguration,\

  37. org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration,\

  38. org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration,\

  39. org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration,\

  40. org.springframework.boot.autoconfigure.elasticsearch.jest.JestAutoConfiguration,\

  41. org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration,\

  42. org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration,\

  43. org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration,\

  44. org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration,\

  45. org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration,\

  46. org.springframework.boot.autoconfigure.hazelcast.HazelcastAutoConfiguration,\

  47. org.springframework.boot.autoconfigure.hazelcast.HazelcastJpaDependencyAutoConfiguration,\

  48. org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration,\

  49. org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration,\

  50. org.springframework.boot.autoconfigure.influx.InfluxDbAutoConfiguration,\

  51. org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration,\

  52. org.springframework.boot.autoconfigure.integration.IntegrationAutoConfiguration,\

  53. org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration,\

  54. org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\

  55. org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,\

  56. org.springframework.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration,\

  57. org.springframework.boot.autoconfigure.jdbc.XADataSourceAutoConfiguration,\

  58. org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,\

  59. org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration,\

  60. org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration,\

  61. org.springframework.boot.autoconfigure.jms.JndiConnectionFactoryAutoConfiguration,\

  62. org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration,\

  63. org.springframework.boot.autoconfigure.jms.artemis.ArtemisAutoConfiguration,\

  64. org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration,\

  65. org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration,\

  66. org.springframework.boot.autoconfigure.jooq.JooqAutoConfiguration,\

  67. org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration,\

  68. org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration,\

  69. org.springframework.boot.autoconfigure.ldap.embedded.EmbeddedLdapAutoConfiguration,\

  70. org.springframework.boot.autoconfigure.ldap.LdapAutoConfiguration,\

  71. org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration,\

  72. org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration,\

  73. org.springframework.boot.autoconfigure.mail.MailSenderValidatorAutoConfiguration,\

  74. org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration,\

  75. org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,\

  76. org.springframework.boot.autoconfigure.mongo.MongoReactiveAutoConfiguration,\

  77. org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration,\

  78. org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,\

  79. org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration,\

  80. org.springframework.boot.autoconfigure.reactor.core.ReactorCoreAutoConfiguration,\

  81. org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration,\

  82. org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration,\

  83. org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration,\

  84. org.springframework.boot.autoconfigure.security.reactive.ReactiveSecurityAutoConfiguration,\

  85. org.springframework.boot.autoconfigure.security.reactive.ReactiveUserDetailsServiceAutoConfiguration,\

  86. org.springframework.boot.autoconfigure.sendgrid.SendGridAutoConfiguration,\

  87. org.springframework.boot.autoconfigure.session.SessionAutoConfiguration,\

  88. org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientAutoConfiguration,\

  89. org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration,\

  90. org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration,\

  91. org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration,\

  92. org.springframework.boot.autoconfigure.transaction.jta.JtaAutoConfiguration,\

  93. org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration,\

  94. org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration,\

  95. org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration,\

  96. org.springframework.boot.autoconfigure.web.reactive.HttpHandlerAutoConfiguration,\

  97. org.springframework.boot.autoconfigure.web.reactive.ReactiveWebServerFactoryAutoConfiguration,\

  98. org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration,\

  99. org.springframework.boot.autoconfigure.web.reactive.error.ErrorWebFluxAutoConfiguration,\

  100. org.springframework.boot.autoconfigure.web.reactive.function.client.WebClientAutoConfiguration,\

  101. org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration,\

  102. org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration,\

  103. org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration,\

  104. org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration,\

  105. org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration,\

  106. org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,\

  107. org.springframework.boot.autoconfigure.websocket.reactive.WebSocketReactiveAutoConfiguration,\

  108. org.springframework.boot.autoconfigure.websocket.servlet.WebSocketServletAutoConfiguration,\

  109. org.springframework.boot.autoconfigure.websocket.servlet.WebSocketMessagingAutoConfiguration,\

  110. org.springframework.boot.autoconfigure.webservices.WebServicesAutoConfiguration

执行流程篇:https://blog.youkuaiyun.com/qq_37598011/article/details/90969634

 

Spring Boot源码解析 - 自动装配原理 作为自动装配核心类,在处理@Import逻辑中触发自动装配的过程,最终获取需要导入的自动装配类集合,实现Spring Boot的自动装配功能。注解,我们可以在一个配置类中引入其他的配置类,从而将它们的Bean定义和配置合并到当前配置中。,以key-value的形式进行本地缓存,后续触发自动装配时,从本地缓存中获取自动装配类集合。后置处理器会在扫描解析启动类当前包以及子包下的配置类,并将其注册为Spring管理的。,其他部分与自动装配无关。的自动装配类集合,然后去重过滤返回需要导入的自动装配类数组。 阅读详情

相关推荐

Spring Boot启动原理解析与@SpringBootApplication注解解读

Spring Boot是一种基于Spring框架的快速开发、简化配置的工具,它提供了许多开箱即用的特性和功能,使得开发人员能够更加专注于业务逻辑的实现而不必过多关注底层的配置细节。而@SpringBootApplication注解则是Spring Boot项目的入口点,它减少了大量的手动配置,简化了Spring Boot应用的启动过程。通过对@SpringBootApplication注解的解读,我们可以看出它的作用在于简化了Spring Boot应用的启动配置。

TechWhizZ的博客 283

Spring Boot注解的运行原理

Spring Boot注解的运行原理

Smile的博客 2914

springboot启动类注解详解

因为spring默认情况下只能扫描到我们项目启动类下的组件,但是对于项目引入的jar包文件我们就必须手动扫描,springboot通过读取jar包文件下的META-INF/spring.factories文件,将其中指定的需要装配的类读取到IOC容器中,从而使得非spring官方的组件也能够不修改原有代码的情况下,只需要增加一部分自动装配的文件配置和自动装配类,即可完成与springboot的整合,充分体现了Java中SPI的设计理念。

qq_59620850的博客 5710

MID360+fastlio功能笔记

前言。

qq_35598561的博客 5300

STK中的传感器与通信组件:雷达、发射机、接收机与天线的协同建模

本文深入解析了STK软件中传感器、雷达、发射机、接收机与天线的协同建模方法。通过构建一个完整的卫星对地数传系统实例,阐述了各组件如何分工协作,实现从几何指向到射频链路的高保真仿真,为复杂航天通信与探测系统的设计与分析提供了高效、灵活的解决方案。

weixin_29271263的博客 273

CXF在Spring2.5中出现错误,及解决方法。

当在Spring2.5中启用基于标注配置Bean时(即开启以下配置): &lt; context:annotation-config   /&gt;    &lt; context:component-scan   base-package = "mypackage"   /&gt;    时,C...

长安新都市业主家园 320

AI人工智能领域持续学习:提升技术能力的关键

在当今科技飞速发展的时代,AI人工智能已经渗透到我们生活的方方面面。本文章的目的就是帮助大家了解在AI人工智能领域持续学习的重要性,以及如何通过持续学习来提升自己的技术能力。文章会涵盖AI的核心概念、持续学习的原理和方法、实际应用场景等方面,让大家对AI领域的持续学习有一个全面的认识。本文首先会介绍AI人工智能的核心概念,让大家对这个领域有一个初步的了解。然后详细讲解持续学习的原理和方法,通过代码示例展示如何在实际项目中实现持续学习。接着会分析AI持续学习在不同场景的应用,推荐一些学习工具和资源。

AI 原生应用开发的博客 1289

Springboot 应用中,@Component 注解是如何生效的 等

在invokeBeanFactoryPostProcessor 之前,有一个方法,prepareContext() 会被调用,prepareContext 方法中,会把启动类的BeanDefinition注册进BeanFactory(运行启动类时,main方法传入的参数哪个class,就会注册哪个class,一般传入的参数都是启动类本身的class)。因为你光启动类有这个@Import注解,它是起不了作用的,它只是光秃秃的在注解在启动类上。那我再问一遍,再强调一遍,什么时候会解析到启动类这个配置类呢?

Morning Forever的专栏 926

EZ-INSAR工具箱(使用历史问题)

把 rasterio 升到 1.3+(或退回 py39)→features能 import → 脚本能跑 → 出图 → MATLAB 不再报错!

2301_79258000的博客 121

STM32入门教程:智能储物柜控制

在这个例子中,我们将使用一个4x4的储物柜,共有16个储物格。我们了解了硬件准备、储物柜电路设计、STM32的基本配置、储物柜控制代码的编写以及测试和调试等方面的知识。根据我们的电路设计,我们需要将一些引脚配置为输出,并将其他引脚配置为输入。在本教程中,我们将使用STM32微控制器来实现一个基本的智能储物柜控制系统。在主函数中,我们将不断循环读取传感器数据,并根据数据的变化来控制储物柜的开关和显示相关信息。这个函数将读取人体感应传感器、温湿度传感器和光照传感器的数据,并将数据存储到相应的变量中。

m0_75244442的博客 661

Spring Boot 启动注解原理

Spring Boot 的核心启动注解是 @SpringBootApplication,它是一个组合注解,包含了多个关键注解的功能。识别 @Component, @Service, @Repository, @Controller 等注解的类。例如 DataSourceAutoConfiguration 只在存在 DataSource 类时生效。@ConditionalOnClass:类路径存在指定类时生效。使用 @Conditional 系列注解控制配置类的生效条件。

weixin_45715466的博客 366

Python爬虫教程:抓取区块链交易信息及加密货币市场数据

随着区块链技术和加密货币的迅猛发展,区块链交易和加密货币市场的数据逐渐成为金融、技术、经济研究等领域的热点。对于开发者和研究者而言,实时获取区块链交易数据和加密货币市场行情,对于投资分析、市场预测、技术研究等具有重要的参考价值。本文将通过Python爬虫技术,介绍如何抓取区块链交易信息及加密货币市场数据,详细阐述数据获取的原理、技术方案、实现方法以及抓取到的数据的存储与分析。我们将依托最新的爬虫技术,如requestsSeleniumScrapy,以及相关的数据处理库(如pandasmatplotlib。

2201_76125261的博客 2777

Spring Boot 启动流程解析

Spring Boot 的启动流程是一个复杂而精密的过程。本文将通过源码分析的方式,详细解析 Spring Boot 从启动到运行的完整流程

lzz的博客 471

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Spring Boot 的IOC启动源码分析——三级缓存、后置处理器、@Enablexxx 注解、事件监听器等原理解析

一、IoC与DI IoC(控制反转)就是把原来代码里需要实现的对象创建、依赖,反转给容器来帮忙实现。我们需要创建一个容器,同时需要一种描述来让容器知道要创建的对象和对象的关系。这个描述的最具体的表现就是我们看到的配置文件。 DI(Dependency Injection,依赖注入) 就是指对象被动接收依赖类而不自己主动去找,换句话说,就是指对象不是从容器中查找它依赖的类,而是在容器实例化对象时主动将它依赖的类注入给它。 二、Spring核心容器类 1. BeanFactory Spring中Bea

u012361112的博客 1036

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

揭秘SpringBoot自动配置原理:从@SpringBootApplication到启动流程全解析

在当今的 Java 开发领域,Spring Boot 凭借其强大的自动配置功能,极大地简化了 Spring 应用的开发过程,让开发者能够更加专注于业务逻辑的实现。然而,很多开发者在享受 Spring Boot 带来的便捷时,却对其自动配置的原理知之甚少。本文将深入剖析 Spring Boot 自动配置的原理,从 `@SpringBootApplication` 注解开始,逐步解析其启动流程,帮助开发者更好地理解和使用 Spring Boot。

梵心白莲的博客 1109

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

全网最详细的Spring Boot原理深度解析

全文通过源码分析、场景示例与架构图,揭示Spring Boot如何将复杂逻辑封装为“开箱即用”体验,助力开发者构建高效、可维护的企业级应用。理解这些原理,可精准掌控框架行为,提升问题诊断与定制化开发能力

m0_71744084的博客 8994

Spring Boot 启动流程及配置类解析原理

在 Spring Boot 中,配置类通常是使用注解标记的类。这些类用于定义 Bean,进行依赖注入和其他配置信息。@Bean​。

yuan19997的博客 1064

@SpringBootApplication详解(Spring Boot启动原理)

如果我们想要使用传统意义上的 Spring 应用,那么需要配置大量的 xml 文件才可以启动,而且随着项目的越来越庞大,配置文件也会越来越繁琐,这在一定程度上也给开发者带来了困扰,于是 SpringBoot 就应运而生了。2012 年 10 月,一个叫 Mike Youngstrom 的人在 Spring Jira 中创建了一个功能请求,要求在 Spring Framework 中支持无容器 Web 应用程序体系结构,提出了在主容器引导 Spring 容器内配置 Web 容器服务。

m0_74823388的博客 5294

Spring Boot 常用注解面试题深度解析

Spring Boot 注解是其“约定优于配置”的核心实现工具,通过注解简化了传统 Spring 应用的繁琐配置。以下从出发,深度解析 Spring Boot 最常用注解的原理、作用及使用场景,覆盖启动类、配置、依赖注入、AOP、Web 开发等核心场景。

qq_44431362的博客 1027

简明易理解的@SpringBootApplication注解源码解析(包含面试提问)

欢迎关注文章系列 ,关注我 《提升能力,涨薪可待》 《面试知识,工作可待》 《实战演练,拒绝996》 欢迎关注我博客,原创技术文章第一时间推出 也欢迎关注公 众 号【Ccww笔记】,同时推出 如果此文对你有帮助、喜欢的话,那就点个赞呗,点个关注呗! 《提升能力,涨薪可待篇》- @SpringBootApplication注解源码解析 一、@SpringBootApplication 的作用是什...

Ccww_的博客 9564

componentscan注解的用法和作用_Spring Boot 这么火,常用注解和原理都给你整理好了...

作者:云天 链接:https://www.cnblogs.com/tqlin/p/11687811.html一、启动注解 @SpringBootApplication查看源码可发现,@SpringBootApplication是一个复合注解,包含了@SpringBootConfiguration,@EnableAutoConfiguration`,@ComponentScan`这三个注解``@Sp...

weixin_39641257的博客 1025

SpringBoot-05 启动类与核心注解

启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解: @SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。 @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguratio

FengYuPingLan的博客 506

Spring Boot 注解:深度解析与应用场景

Spring Boot 注解为开发者提供了一种简洁、高效的方式来构建应用程序,涵盖了从应用启动、组件管理、依赖注入、Web 请求处理到事务管理等多个方面。通过深入理解这些注解的作用、原理和常用场景,开发者能够更加熟练地运用 Spring Boot 框架,提高开发效率,构建出高质量、可维护的应用程序。随着对 Spring Boot 的不断深入学习和实践,开发者还会遇到更多丰富且强大的注解,进一步提升开发体验和应用性能。

lijingxiaov5的博客 1266
上一篇: SpringSecurity启动流程源码解析
下一篇: 2021-01-12
Hack_Bug
博客等级 码龄15年 34粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值