围绕spring boot 的优点,本文我们来探究一下spring boot具体是如何实现这些特性的。



![在这里插入有防盗链机制,建议将图片保存下来直接上传(img-(![https://i-blog.csdnimg.cn/blog_migrate/9510af7d4c6852c602584931fe89cd6d.png#pic_center)]](https://i-blog.csdnimg.cn/blog_migrate/9510af7d4c6852c602584931fe89cd6d.png#pic_center)


- 自动配置:针对很多Spring应用程序和常见的应用功能,Spring boot能自动提供相关配置;
- 起步依赖:告诉Spring boot需要什么功能,它就能引入需要的依赖库;
- Actuator:让你能够深入运行中的Spring Boot应用程序,一探Spring boot程序的内部信息;
- 命令行界面:这是Spring Boot的可选特性,主要针对Groovy语言使用。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes =
AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
/**
* Exclude specific auto-configuration classes such that they will never be
applied.
* @return the classes to exclude
*/
@AliasFor(annotation = EnableAutoConfiguration.class)
... ... ...
@SpringBootApplication是一个复合注解,其中关键@EnableAutoConfiguration,就是开启自动配置的意思
@SpringBootApplication包括三个注解,功能如下:@EnableAutoConfiguration:SpringBoot根据应用所声明的依赖来对Spring框架进行自动配置
@SpringBootConfiguration(内部为@Configuration):被标注的类等于在spring的XML配置文件中(applicationContext.xml),装配所有bean事务,提供了一个spring的上下文环境
@ComponentScan:组件扫描,可自动发现和装配Bean,默认扫描SpringApplication的run方法里的Booter.class所在的包路径下文件,所以最好将该启动类放到根包路径下.

@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 {};
@Import导入的AutoConfigurationImportSelector的selectImports()方法通过SpringFactoriesLoader.loadFactoryNames()扫描所有具有META-INF/spring.factories的jar包。spring-boot-autoconfigure-x.x.x.x.jar里就有一个这样的spring.factories文件。


@EnableAutoConfiguration注解通过@SpringBootApplication被间接的标记在了Spring Boot的启动类上。在SpringApplication.run(…)的内部就会执行selectImports()方法,找到所有JavaConfig自动配置类的全限定名对应的class,然后将所有自动配置类加载到Spring容器中。



@EnableConfigurationProperties(ServerProperties.class) 代表加载ServerProperties服务器配置属性类
prefix = “server” 表示SpringBoot配置文件中的前缀,@ConfigurationProperties会将配置文件中以server开始的属性映射到该类

Spring Boot自动化配置的Bean提供了300多个属性,用于调整设置,只要在环境变量、Java系统属性、JNDI、命令行或者属性文件里面进行指定就可以了。
server.port 服务器的HTTP端口
spring.datasource.url 数据库驱动路径
spring.datasource.username 用户名
spring.datasource.password 密码

mybatis-spring-boot-starter、spring-boot-starter-web等组件的META-INF文件下均含有spring.factories文件,自动配置模块中,SpringFactoriesLoader收集到文件中的类全名并返回一个类全名的数组,返回的类全名通过反射被实例化,就形成了具体的工厂实例,工厂实例来生成组件具体需要的bean。

spring-boot-starter-parent -> spring-boot-starter-dependencies



Actuator是Springboot提供的用来对应用系统进行自省和监控的功能模块,借助于Actuator开发者可以很方便地对应用系统某些监控指标进行查看、统计等。
命令行模式:安装Spring Boot CLI工具包


原图:https://www.processon.com/view/link/59812124e4b0de2518b32b6e
流程:配置环境(environment)、事件监听(listeners)、应用上下文(applicationContext),并基于以上条件,在容器中开始实例化我们需要的Bean
https://www.cnblogs.com/trgl/p/7353782.html
1.创建了应用的监听器SpringApplicationRunListeners并开始监听
2.加载SpringBoot配置环境(ConfigurableEnvironment)
3.配置环境(Environment)加入到监听器对象中(SpringApplicationRunListeners)
4.创建run方法的返回对象:ConfigurableApplicationContext(应用配置上下文)
本文深入探讨了Spring Boot的核心特性,包括自动配置、起步依赖、Actuator和命令行界面。自动配置通过@SpringBootApplication和@EnableAutoConfiguration注解实现,加载配置类到Spring容器。Actuator提供了应用监控功能。此外,详细解释了配置文件如何影响Bean设置,如server.port、数据库连接等。Spring Boot通过各starter模块的spring.factories文件实现组件自动配置。最后,概述了Spring Boot启动过程,涉及监听器、环境配置和应用上下文的创建。
539

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



