美文网首页
SpringBoot(简称SB) Day_02

SpringBoot(简称SB) Day_02

作者: 小禄来学习 | 来源:发表于2022-07-25 22:38 被阅读0次

通过helloSpringBoot程序,我们已经发现了SpringBoot的简便快捷之处,这种简便之处来源于SB的两大特性:依赖管理和自动配置。

依赖管理特性:

1.父项目做依赖管理:父项目已经包含了几乎所有SB开发所需的依赖。因此我们引入依赖默认都可以不写版本,但引入非版本仲裁的jar,要写版本号。

2.starter场景启动器

在SB中有很多spring-boot-starter-*的依赖,只要引入了这种依赖,这个场景所有的常规依赖都会被引入。

自动配置特性:

1.自动配置Tomcat;自动配置SpringMVC

2.自动配好Web常见功能,如:字符编码问题

3.默认的包结构:主程序所在包及下面所有子包里的组件都会被默认扫描(想要改变扫描路径,@SpringBootApplication(scanBasePackages="com.atguigu")

或者@ComponentScan 指定扫描路径)

@SpringBootApplication

等同于

@SpringBootConfiguration

@EnableAutoConfiguration

@ComponentScan("com.atguigu.boot")

4.各种配置都有默认值,默认配置最终都映射到MultiPartProperties;配置文件的值最终会绑定到每个类上,这个类会在容器中创建对象。

5.按需加载所有自动配置项:引入哪个场景,才会开启哪个场景的配置文件

几种底层注解:

1.@Configuration

用来注解类,代表此类是个配置类。如下所示:

@Bean注解修饰配置类中的方法,往容器中添加组件,以方法名为组件的id,返回类型就是组件的类型,返回值就是组件在容器中的实例。例如如上程序就向容器中添加了User组件,实例为18岁的张三。

注意:

1.此处添加的组件默认是单实例的。

2.配置类(MyConfig)本身也一个组件,而且是个增强了的代理组件。

3.@Configuration有一个属性:proxyBeanMethod,默认为true,代表当调用此组件时,会去容器里面找(单实例),若为false,则每次新建一个实例。

2.@Import:向容器中导入指定组件

例如@Import(User.class):便向容器中自动创建了User类型的组件

3.@Conditional

条件装配:满足conditional指定的条件,才会执行组件注入。

4.@ImportResource:导入Spring配置文件

例如@ImportResource("classpath:beans.xml")

5.@ConfigurationProperties:配置绑定

如果想让一个javaBean和配置文件中的信息一一绑定,就用容器中的组件(容器中的组件是指这个类要注解了@Component、@Service等)的@ConfigurationProperties注解,利用类中的属性读取配置文件中的信息。

例:

假设resources下有一个application.properties文件,其中有这样两条信息:mycar.brand=奔驰,mycar.price=300000,则获取容器中的car实例时,便可以读取这些信息。

第五点中的功能也可以通过如下方式来实现:

6.@ConfigurationProperties+ @EnableConfigurationProperties

在配置类上标@EnableConfigurationProperties注解,并填入要开启配置绑定的类,如下:

此注解的两个功能如上所示,这样就不用在Car类上标@Component注解,Car也能作为组件被注册进容器中。

自动配置的源码分析:

前面提到,主程序类的@SpringBootApplication注解相当于@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan三个注解,下面依次分析。


@SpringBootConfiguration:

代表主程序类是一个配置类

@EnableAutoConfiguration:

@AutoConfigurationPackage和@Import(AutoConfigurationImportSelector.class)的结合体。

1.@AutoConfigurationPackage

@Import(AutoConfigurationPackages.Registrar.class) //给容器中导入一个组件

public @interface AutoConfigurationPackage {}

//利用Registrar给容器中导入一系列组件

//将指定的一个包下的所有组件导入进来?MainApplication 所在包下。

2.@Import(AutoConfigurationImportSelector.class)

1、利用getAutoConfigurationEntry(annotationMetadata);给容器中批量导入一些组件

2、调用List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes)获取到所有需要导入到容器中的配置类

3、利用工厂加载 Map<String, List<String>> loadSpringFactories(@Nullable ClassLoader classLoader);得到所有的组件

4、从META-INF/spring.factories位置来加载一个文件。

默认扫描我们当前系统里面所有META-INF/spring.factories位置的文件

    spring-boot-autoconfigure-2.3.4.RELEASE.jar包里面也有META-INF/spring.factories

springBoot的关键一点:虽然在一开始就写死了所有配置类,但按照条件装配原则,最后还是会按需配置。

@ComponentScan:

指明要扫描哪些地方

总结:

SpringBoot先加载所有的自动配置类  xxxxxAutoConfiguration

每个自动配置类按照条件进行生效,默认都会绑定配置文件指定的值。xxxxProperties里面拿。xxxProperties和配置文件进行了绑定

生效的配置类就会给容器中装配很多组件

只要容器中有这些组件,相当于这些功能就有了

定制化配置的两种方法:

1.用户直接自己@Bean替换底层的组件

2.用户去看这个组件是获取的配置文件什么值就去修改:

xxxxxAutoConfiguration ---> 组件  ---> xxxxProperties里面拿值  ----> application.properties

相关文章

  • SpringBoot(简称SB) Day_02

    通过helloSpringBoot程序,我们已经发现了SpringBoot的简便快捷之处,这种简便之处来源于SB的...

  • SpringBoot入门

    SpingBoot 是什么? SpringBoot以下简称SB ,SpringBoot是SpringMVC的升级版...

  • 快速搭建springboot框架

    关于SpringBoot(以下简称sb,我在想之所以叫springboot是不是意味着连sb都会用)我不想多说,项...

  • SpringSecurity 快速实现项目

    我的开发环境是springboot(下面简称sb)+freemarker+maven 如大家所知道的,sb里面没有...

  • Jackson全面解析--SpringBoot集成Jackson

    在前面章节的介绍中,我们都是用ObjectMapper来做的测试,那么在SpringBoot(以下简称sb)中如何...

  • SpringBoot + SpringCloud 版本对应关系

    每一版SpringCloud(简称SC)都会有一个对应的SpringBoot(SB)相对应,如果对应错了,那就是莫...

  • 师门笔记7.smartbeta

    下面开始讲smartbeta,简称sb。但是这个sb可不傻,它是聪明的beta。 beta是什么呢?就是风险! 这...

  • SpringBoot(SB)继续学习

    拦截器: SB的拦截器需要继承HandlerInterceptor接口,其中有两个方法,一个在Controller...

  • 亲,你的表情包掉了

    前同事,SB(此君网名Spiritbreaker,故简称SB),一个挺好玩的IT直男。 从公司离职,桌上东西打包完...

  • Smart beta指数基金

    Smart beta指数基金(以下简称SB基金)近两年来炙热可手。SB基金最直白的中文名称应该是“策略指数”,即在...

网友评论

      本文标题:SpringBoot(简称SB) Day_02

      本文链接:https://www.haomeiwen.com/subject/xnvgirtx.html