Spring boot学习1:starter工作原理解析,参数规则讲解-带着问题去学习

1. 问题,为什么要用spring boot?和ssm工程对比有什么优势?

	有的人熟悉ssm框架,有的人则直接是从spring boot开始学习工程的;
  1. ssm框架的核心就是IOC,就是bean工厂;
  2. 工程的搭建过程:
  • 加入相关的jar包;
  • 配置web.xml,加载spring和spring mvc;
  • 配置数据库链接,配置spring事务;
  • 配置加载配置文件的读取,开启注解;
  • 配置日志文件等等;
    这其中的难点,不是一点点啊:
  • 包依赖:不知道加载哪个包,版本号对应不上…
  • bean的配置;
  1. spring boot把包的依赖关系便的简单了,也不用自己生产bean,只需要在pom.xml文件中引入相关依赖就可以了;
  2. 0 xml配置;
    这些东西都是spring boot中的starter帮我们做了

2. Starter帮我们做了两件事情

  1. 引入相关的jar包;
  2. 自动完成bean配置;
    问题来了,它是怎么实现的呢?

3. 以mybatis为例,我们找找实现过程:

  1. 首先,添加mybatis-spring-boot-starter依赖:
    在这里插入图片描述
  2. 打开External Libraries文件,找到跟mybatis相关的包,是的,只要添加一个依赖,就会带来全家桶:
    在这里插入图片描述
    在这里插入图片描述
  3. 打开这个autoconfigure类:
    这里面有配置数据源的注解,有添加MyabtisProperties的注解[这个注解里面的属性就是我们在application.yml文件里的myabtis的配置参数],
    在这里插入图片描述
    在这里插入图片描述
  4. 这里有个问题,在MybatisAutoConfiguration类中并没有定义数据源,那么这个数据源是怎么来的?是根据它上面的@AutoConfigureAfter(DataSourceAutoConfiguration.class)注解来的,点击进去之后发现这个注解是在org.springframework.boot.autoconfigure包中,是spring boot帮我们完成的:
    在这里插入图片描述
    在这里插入图片描述
    那么有一个问题,如果数据源没有配置,mybatis还能不能配置?
    如果强制配置了mybatis,没有配置数据源,就会报错,那怎么办呢?
    所以说mybatis包和spring boot的依赖包还是有依赖关系的;例如一些第三方jar包,如果我们没有引用,那就不能被实例化,这很神奇,是怎么做到的呢?其实,就是下面的条件依赖注解,只有满足了这些条件依赖注解要求,才会产生bean,否则不会生效;
    这就涉及到了自动配置中的条件依赖注解[也就是说满足条件了这个配置类才能生效],这些注解都是spring boot才有的,spring没有,例如:
  • @ConditionalOnClass:有类的时候才配置
  • @ConditionalOnMissingClass:缺少类的条件才配置
  • @ConditionalOnBean:有bean的条件才配置
  • @ConditionalOnMissingBean:缺少bean的条件下才配置,可以参考:https://blog.csdn.net/xcy1193068639/article/details/81517456
  • ConditionalOnProperty
  • ConditionalOnResource
  • ConditionalOnWebApplication
  • ConditionalOnNotWebApplication
  • ConditionalOnExpression
    还有指定顺序的条件依赖:
  • @AutoConfigureAfter:在xxx加载之后之后才配置
  • @AutoConfigureBefore:在xxx加载之前就需要配置
  • @AutoConfigureOrder:定义加载顺序
    下面是例子[图片中第一句话:有DataSource的Bean实例的条件下才配置,第二句话,将类字改成Bean实例,更好理解点]:
    在这里插入图片描述
    在这里插入图片描述
  1. 问题:这些bean配置需要的参数是如何规定并获取的?上图:MybatisProperties文件:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • @EnableConfigurationProperties:使用 @ConfigurationProperties 注解的类生效,因此会在MybatisProperties.class类上看到@ConfigurationProperties注解,这个注解是指定配置类的,下面我们再说一下数据源的配置,我们用的DataSourceAutoConfiguration是在spring boot的autoconfigure里面,再例如kafka的自动配置,如下;
    在这里插入图片描述
    在DataSourceAutoConfiguration上我们又发现了这货:
    在这里插入图片描述
    继续点开,终于找到了一个很熟悉的名字:spring.datasource,下面有用户名,密码等:
    在这里插入图片描述
    到这里,我们就知道了,怎么从mybatis里面找哪些参数可以配置了

3. 下一个问题:application.yml文件中点点儿,参数就自动出来了,idea是怎么找出来的?怎么实现的?而且小括号里还有提示?很神奇!!

话不多说,直接上图说话!
在这里插入图片描述
有一个实现过程,就是当我们把mybatis的依赖添加进来的时候,idea就去找@ConfigurationProperties注解,然后扫描里面的参数,当你用的时候就提示出来,但是!这种方式很耗资源,idea肯定不是这么实现的;
其实,是在这个地方,spring-configuration-metadata.json,元数据信息,这里面就是所有的配置文件信息,idea其实就是找到这个文件,读取的这个文件他,然后提示给我们的,这个文件不是手动输入的,是自动生成的,如果需要自动生成,需要引入一个spring boot的依赖,下一个文章中有相关信息:
在这里插入图片描述
在这里插入图片描述

4. 问题:这些bean是怎么被spring boot加载进去的?我们只要引入了mybatis依赖,这些信息就会被加载,挺好玩的?怎么实现的?

  • 我们用@SpringBootApplication来扫描,详细过程如下:
  • spring-boot的bean加载过程:
    如果是我们自己写的程序,我们会在XXX Application.java中添加@SpringBootApplication注解,这个注解是复合注解,里面包含了其他很多注解,默认这个注解会扫描XXX Application.java**下的所有包以及子包[这是一个递归扫描],找到里面的@Component,其实@Repository,@Service,@RestController,@Controller都包含了@Component
    在这里插入图片描述
    那么问题来了,刚才我们添加的mybatis依赖,包没有在XXX Application.java下面呀?那么他的规则是什么呢?如下,
    在这里插入图片描述
    这里需要我们了解一个知识点:SPI,学习Dubbo,一个易于扩展的框架;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值