简述:springboot启动类详解

接下来都是围绕着这个启动类进行介绍
一.点进去run方法,可以看到

它可以去跑spring的一个实例,传参方式,任意一个类型的类和一个String数组,它会使用默认的配置,比如@SpringBootApplication,它会运行一个上下文对象
1.@SpringBootApplication的应用
点进去看下

①:@SpringBootConfiguration
@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Configurationpublic @interface SpringBootConfiguration { @AliasFor( annotation = Configuration.class ) boolean proxyBeanMethods() default true;}它的主要配置是@Configuration,它是一个容器,相当于我们写spring中的xml的一些配置,如beans,包含了许多bean,是一个IOC容器
②:@EnableAutoConfiguration
它是用于开启自动装配的,点进去看下
@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@AutoConfigurationPackage@Import({AutoConfigurationImportSelector.class})public @interface EnableAutoConfiguration { String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration"; Class>[] exclude() default {}; String[] excludeName() default {};}@Import导入一个或者多个Configuration
AutoConfigurationImportSelector自动装配的选择类
选择一些你想要导入的装配的类
public String[] selectImports(AnnotationMetadata annotationMetadata) { if (!this.isEnabled(annotationMetadata)) { return NO_IMPORTS; } else { //去获得自动装配的类 AutoConfigurationImportSelector.AutoConfigurationEntry autoConfigurationEntry = this.getAutoConfigurationEntry(annotationMetadata); return StringUtils.toStringArray(autoConfigurationEntry.getConfigurations()); } } //getAutoConfigurationEntry方法 protected AutoConfigurationImportSelector.AutoConfigurationEntry getAutoConfigurationEntry(AnnotationMetadata annotationMetadata) { if (!this.isEnabled(annotationMetadata)) { return EMPTY_ENTRY; } else { AnnotationAttributes attributes = this.getAttributes(annotationMetadata); //获得一些默认的配置 List configurations = this.getCandidateConfigurations(annotationMetadata, attributes); configurations = this.removeDuplicates(configurations); Set exclusions = this.getExclusions(annotationMetadata, attributes); this.checkExcludedClasses(configurations, exclusions); configurations.removeAll(exclusions); configurations = this.getConfigurationClassFilter().filter(configurations); this.fireAutoConfigurationImportEvents(configurations, exclusions); return new AutoConfigurationImportSelector.AutoConfigurationEntry(configurations, exclusions); } } //此种方法在 AutoConfigurationImportSelector 类中 protected List getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) { List configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader()); //断言,如果为空会出现断言后的异常,可以看到有META-INF/spring.factories Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct."); return configurations; }定位这个类,可以看到AutoConfigurationImportSelector在下面的这个jar包中

一:找到对应的META-INF/spring.factories
1.找到对应的类信息,点进入


@ConditionalOnClass如上图,满足条件的时候进行加载点进入tomcat看一下

有默认端口号和hostname
2.回到META-INF/spring.factories找到WebMvcAutoConfiguration

当我们使用@SpringBootApplication,它会自动帮我们装配springmvc

3.回到META-INF/spring.factories找到ServletWebServerFactoryAutoConfiguration

点进去,会看到一个jar,它这个类的含义是自动装配我们的web服务器,就是使用我们的内置tomcat

startup是用于启动tomcat的一个命令4.META-INF/spring.factories还包含很多类
//springboot所推荐的一个模板配置类org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration,//事务装配的自动类org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration,k.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration,//事务装配的自动类org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration,版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:
https://blog.youkuaiyun.com/kawayiyy123/article/details/109386102
本文围绕Spring Boot启动类展开介绍。点进run方法,它会运行Spring实例并使用默认配置。@SpringBootApplication包含@SpringBootConfiguration和@EnableAutoConfiguration,后者用于开启自动装配。通过定位AutoConfigurationImportSelector类,可在META - INF/spring.factories中找到各类自动装配信息,如Tomcat、Spring MVC等。
2039

被折叠的 条评论
为什么被折叠?



