SpringBoot入门基础

Posted 吴二喵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot入门基础相关的知识,希望对你有一定的参考价值。

一、自动配置特性

响应式编程
yueque.com/atguigu/springboot 文档

maven3.3以上
mvn -v

spring可以做什么
1、微服务 microservices
2、响应式编程 reactive
异步数据流 异步非阻塞 少量资源大吞吐量
3、cloud
4、web apps web应用
5、serveless 无服务 faas 函数式服务
6、event driver
7、batch 批处理

spring生态圈
spring framework
spring boot
spring data
spring cloud 分布式
spring security
spring batch
。。。

spring5重大升级
1、响应式编程
servlet stack
reactive stack
Java8的默认实现
2、内部设计变化

spring boot
能快速创建出生产级别的spring应用

优点
1、创建独立spring应用
2、内嵌web服务器
3、自动starter以来,简化构建配置
4、自动配置spring以及第三方功能
5、提供生产级别的监控,健康检查及外部化配置
6、无代码生成,无需编写xml

spring boot是整合spring技术栈的一站式框架
是spring技术站的快速开发脚手架

缺点
1、迭代快
2、封装太深,内部原理复杂

###微服务
1、微服务是一种架构风格
2、一个应用拆分为一组小型服务
3、每个服务运行在自己的进程内,也就是可独立部署和升级
4、服务之间使用轻量级http交互
5、服务围绕业务功能拆分
6、可以由全自动部署机制独立部署
7、去中心化,服务自治。服务可以使用不同语言不同存储技术

分布式的困难
1、远程调用
2、服务发现
3、负载均衡
4、服务容错
5、配置管理
6、服务监控
7、链路追踪
8、日志管理
9、任务调度

上云的困难
1、服务自愈
2、弹性伸缩
3、服务隔离
4、自动化部署
5、灰度发布
6、流量治理

云原生

spring-boot-starter-web web场景的启动

@Restcontroller

@SpringBootApplication

plugin插件把项目打成jar包
取消cmd的快速编辑模式

依赖管理

1、spring-boot-dependencies 中定义了版本号
几乎声明了所有开发常用的依赖的版本号,自动版本仲裁机制

可以查看里面规定当前依赖的版本用的key,并可在当前项目里重写配置

2、场景启动器 spring-boot-starter-***
自动引入对应场景所有常规需要的依赖

3、引入非版本仲裁的jar需要写版本号

自动配置

1、自动配好tomcat
2、自动配好spring mvc
3、自动配好web常见功能
4、默认的包结构
主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来
想要改变扫描路径。
scanbasepackages
@componentscan
5、各种配置拥有默认值

public static void main(String[] args)
//1、返回ioc容器
ConfigurableApplicationContext run = SpringApplication.run(DemoApplication.class, args);
//2、查看容器里面的组件
String[] names = run.getBeanDefinitionNames();
for (String name : names)
System.out.println(name);


底层注解—@Configuration注解

配置类

1、方法上有@Bean注解,给容器中添加组件,以方法名作为组件的id,返回类型就是组件类型,返回的值就是组件在容器中的实例
默认注册的组件是单实例的
外部无论对配置类中的这个组件注册方法调用多少次获取
2、配置类本身也是组件
com.spring.data.demo.config.WebConfig E n h a n c e r B y S p r i n g C G L I B EnhancerBySpringCGLIB EnhancerBySpringCGLIB89769b70@10ef5fa0
cglib代理增强
3、full模式和lite模式(轻量级配置)

boolean proxyBeanMethods() default true;
代理bean的方法,默认是true

如果@Configuration(proxyBeanMethods = true)
配置类代理对象调用方法会判断容器有没有该实例,有就获取没有创建

如果配置成false,则不会判断容器,直接新建一个对象;如果设置成false启动会变快。

最佳实战:1、配置类组件之间无依赖关系用lite模式加速容器启动过程,减少判断
2、配置类组件之间有依赖关系,方法会被调用得到之前单实例组件,用full模式

@import
给容器中自动创建出组件名,默认你组件的名字就是全类名

@Conditional
条件装配:满足conditional指定的条件,则进行组件注入
@ConditionalOnBean(name=“tom”)
有tom组件则进行相应组件注入

@ImportResource
@ImportResource(“classpath:bean.xml”)
导入spring配置文件来生效

配置绑定

@ConfigurationProperties(prefix = “mycar”)
@Component
只有容器中的组件,才会拥有springboot提供的强大功能,比如这里的配置绑定

@ConfigurationProperties(prefix = “user”)
@EnableConfigurationProperties(User.class) //需要加在配置类上

和核心配置文件的配置绑定

自动配置原理入门

1、引导加载自动配置类
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) )

二、SpringBootApplication

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) )
public @interface SpringBootApplication

1、SpringBootConfiguration

@Configuration,代表当前是一个配置类

2、@ComponentScan

指定扫描哪些,spring注解
3、@EnableAutoConfiguration
由下面两个注解合成
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration

3.1@AutoConfigurationPackage
@Import(AutoConfigurationPackages.Registrar.class)//给容器中导入一个组件
//利用registar给容器导入一系列组件,将指定的一个报下的所有组件导入进来
//所以默认导入application所在包下所有组件
public @interface AutoConfigurationPackage

***@Import的高级用法

3.2@Import(AutoConfigurationImportSelector.class)
A利用AutoConfigurationEntry autoConfigurationEntry = getAutoConfigurationEntry(annotationMetadata)
给容器中批量导入一些组件
B.利用List configurations = getCandidateConfigurations(annotationMetadata, attributes);
获取所有需要导入到的后续配置
C.利用工厂加载得到所有的组件
Map<String, List> loadSpringFactories(@Nullable ClassLoader classLoader)
D.从META-INF/spring.factories位置来加载一个文件,默认扫描我们当前系统里面所有META-INF/spring.factories位置的文件
spring-boot-actuator-autoconfigure-2.3.0.RELEASE.jar包的配置文件里面写死了
springboot一启动就要给容器中加载的所有配置类(127个),虽然所有自动配置启动的时候默认全部加载,最终会按条件装配规则@Conditional按需配置。

# Auto Configure
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\\
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\\
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\\
org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\\
org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,\\
org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration,\\
org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration,\\
org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration,\\
org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration,\\
org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration,\\
org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration,\\
org.springframework.boot.autoconfigure.data.cassandra.CassandraReactiveDataAutoConfiguration,\\
org.springframework.boot.autoconfigure.data.cassandra.CassandraReactiveRepositoriesAutoConfiguration,\\
org.springframework.boot.autoconfigure.data.cassandra.CassandraRepositoriesAutoConfiguration,\\
org.springframework.boot.autoconfigure.data.couchbase.CouchbaseDataAutoConfiguration,\\
org.springframework.boot.autoconfigure.data.couchbase.CouchbaseReactiveDataAutoConfiguration,\\
org.springframework.boot.autoconfigure.data.couchbase.CouchbaseReactiveRepositoriesAutoConfiguration,\\
org.springframework.boot.autoconfigure.data.couchbase.CouchbaseRepositoriesAutoConfiguration,\\
org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration,\\
org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration,\\
org.springframework.boot.autoconfigure.data.elasticsearch.ReactiveElasticsearchRepositoriesAutoConfiguration,\\
org.springframework.boot.autoconfigure.data.elasticsearch.ReactiveElasticsearchRestClientAutoConfiguration,\\
org.springframework.boot.autoconfigure.data.jdbc.JdbcRepositoriesAutoConfiguration,\\
org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration,\\
org.springframework.boot.autoconfigure.data.ldap.LdapRepositoriesAutoConfiguration,\\
org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration,\\
org.springframework.boot.autoconfigure.data.mongo.MongoReactiveDataAutoConfiguration,\\
org.springframework.boot.autoconfigure.data.mongo.MongoReactiveRepositoriesAutoConfiguration,\\
org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration,\\
org.springframework.boot.autoconfigure.data.neo4j.Neo4jDataAutoConfiguration,\\
org.springframework.boot.autoconfigure.data.neo4j.Neo4jRepositoriesAutoConfiguration,\\
org.springframework.boot.autoconfigure.data.solr.SolrRepositoriesAutoConfiguration,\\
org.springframework.boot.autoconfigure.data.r2dbc.R2dbcDataAutoConfiguration,\\
org.springframework.boot.autoconfigure.data.r2dbc.R2dbcRepositoriesAutoConfiguration,\\
org.springframework.boot.autoconfigure.data.r2dbc.R2dbcTransactionManagerAutoConfiguration,\\
org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration,\\
org.springframework.boot.autoconfigure.data.redis.RedisReactiveAutoConfiguration,\\
org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration,\\
org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration,\\
org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration,\\
org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration,\\
org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration,\\
org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration,\\
org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration,\\
org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration,\\
org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration,\\
org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration,\\
org.springframework.boot.autoconfigure.hazelcast.HazelcastAutoConfiguration,\\
org.springframework.boot.autoconfigure.hazelcast.HazelcastJpaDependencyAutoConfiguration,\\
org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration,\\
org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration,\\
org.springframework.boot.autoconfigure.influx.InfluxDbAutoConfiguration,\\
org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration,\\
org.springframework.boot.autoconfigure.integration.IntegrationAutoConfiguration,\\
org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration,\\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\\
org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,\\
org.springframework.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration,\\
org.springframework.boot.autoconfigure.jdbc.XADataSourceAutoConfiguration,\\
org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,\\
org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration,\\
org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration,\\
org.springframework.boot.autoconfigure.jms.JndiConnectionFactoryAutoConfiguration,\\
org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration,\\
org.springframework.boot.autoconfigure.jms.artemis.ArtemisAutoConfiguration,\\
org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration,\\
org.springframework.boot.autoconfigure.jooq.JooqAutoConfiguration,\\
org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration,\\
org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration,\\
org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration,\\
org.springframework.boot.autoconfigure.ldap.embedded.EmbeddedLdapAutoConfiguration,\\
org.springframework.boot.autoconfigure.ldap.LdapAutoConfiguration,\\
org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration,\\
org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration,\\
org.springframework.boot.autoconfigure.mail.MailSenderValidatorAutoConfiguration,\\
org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration,\\
org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,\\
org.springframework.boot.autoconfigure.mongo.MongoReactiveAutoConfiguration,\\
org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration,\\
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,\\
org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration,\\
org.springframework.boot.autoconfigure.r2dbc.R2dbcAutoConfiguration,\\
org.springframework.boot.autoconfigure.rsocket.RSocketMessagingAutoConfiguration,\\
org.springframework.boot.autoconfigure.rsocket.RSocketRequesterAutoConfiguration,\\
org.springframework.boot.autoconfigure.rsocket.RSocketServerAutoConfiguration,\\
org.springframework.boot.autoconfigure.rsocket.RSocketStrategiesAutoConfiguration,\\
org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration,\\
org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration,\\
org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration,\\
org.springframework.boot.autoconfigure.security.reactive.ReactiveSecurityAutoConfiguration,\\
org.springframework.boot.autoconfigure.security.reactive.ReactiveUserDetailsServiceAutoConfiguration,\\
org.springframework.boot.autoconfigure.security.rsocket.RSocketSecurityAutoConfiguration,\\
org.springframework.boot.autoconfigure.security.saml2.Saml2RelyingPartyAutoConfiguration,\\
org.springframework.boot.autoconfigure.sendgrid.SendGridAutoConfiguration,\\
org.springframework.boot.autoconfigure.session.SessionAutoConfiguration,\\
org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration,\\
org.springframework.boot.autoconfigure.security.oauth2.client.reactive.ReactiveOAuth2ClientAutoConfiguration,\\
org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration,\\
org.springframework.boot.autoconfigure.security.oauth2.resource.reactive.ReactiveOAuth2ResourceServerAutoConfiguration,\\
org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration,\\
org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration,\\
org.springframework.boot.autoconfigure.task.TaskSchedulingAutoConfiguration,\\
org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration,\\
org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration,\\
org.springframework.boot.autoconfigure.transaction.jta.JtaAutoConfiguration,\\
org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration,\\
org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration,\\
org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration,\\
org.springframework.boot.autoconfigure.web.reactive.HttpHandlerAutoConfiguration,\\
org.springframework.boot.autoconfigure.web.reactive.ReactiveWebServerFactoryAutoConfiguration,\\
org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration,\\
org.springframework.boot.autoconfigure.web.reactive.error.ErrorWebFluxAutoConfiguration,\\
org.springframework.boot.autoconfigure.web.reactive.function.client.ClientHttpConnectorAutoConfiguration,\\
org.springframework.boot.autoconfigure.web.reactive.function.client.WebClientAutoConfiguration,\\
org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration,\\
org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration,\\
org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration,\\
org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration,\\
org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration,\\
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,\\
org.springframework.boot.autoconfigure.websocket.reactive.WebSocketReactiveAutoConfiguration,\\
org.springframework.boot.autoconfigure.websocket.servlet.WebSocketServletAutoConfiguration,\\
org.springframework.boot.autoconfigure.websocket.servlet.WebSocketMessagingAutoConfiguration,\\
org.springframework.boot.autoconfigure.webservices.WebServicesAutoConfiguration,\\
org.springframework.boot.autoconfigure.webservices.client.WebServiceTemplateAutoConfiguration

3.3 修改默认配置

//给容器中加入了文件上传解析器
//给@Bean标注的方法传入了对象的参数,这个参数的值会从容器中找
//防止有些用户配置的文件上传解析器不符合规范
        @Bean
        @ConditionalOnBean(MultipartResolver.class)
        @ConditionalOnMissingBean(
            name = "multipartResolver"
        )
        public MultipartResolver multipartResolver(MultipartResolver resolver) 
            return resolver;
        
    

SpringBoot默认会在底层配好所有的组件。但过用户配置了以用户的优先。

    @Bean
    @ConditionalOnMissingBean
    public CharacterEncodingFilter characterEncodingFilter() 
        CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();
        filter.setEncoding(this.properties.getCharset().name());
        filter.setForceRequestEncoding(this.properties.shouldForce(org.springframework.boot.web.servlet.server.Encoding.Type.REQUEST));
        filter.setForceResponseEncoding(this.properties.shouldForce(org.springframework.boot.web.servlet.server.Encoding.Type.RESPONSE));
        return filter;
    

总结:
SpringBoot先加载所有的自动配置类 xxxAutoConfiguration
每个自动配置类按照条件进行生效,默认都会绑定配置文件指定的值 xxxProperties里面拿,与xxxProperties配置文件进行了绑定
生效的配置类就会给容器中装配很多组件
只要容器中有这些组件,相当于这些功能就有了。
只要用户自己配置,就以用户的优先
定制化配置的方式:
1、用户直接自己@Bean替换底层的组件
2、用户去看这个组件获取的配置文件什么值进行相应的修改

xxxAutoConfiguration—>组件---->xxxPropertie里面拿值—>application.properties

3.4 最佳实践
1、引入场景依赖 xxx-starter
2、查看自动配置了哪些(选做)
applicaiton.properties中开debug=true

以上是关于SpringBoot入门基础的主要内容,如果未能解决你的问题,请参考以下文章

小D课堂 - 零基础入门SpringBoot2.X到实战_汇总

SpringBoot入门基础:介绍

2021版SpringBoot2零基础入门SpringBoot全套完整版

SpringBoot基础入门

SpringBoot2核心技术(基础入门)- 02SpringBoot2入门安装配置

2018最新SpringBoot2.0教程(零基础入门)