MAVEN项目中starter的原理
一.原始方式
我们最早配置spring应用的时候,必须要经历的步骤: 1.pom文件中引入相关的jar包,包括spring,redis,jdbc等等 2.通过properties或者xml配置相关的信息 3.不断调试直到可以使用。
问题:时间长,复杂,同时在写下一个项目的时候大概率要经过相同的模式配置才能达到可以使用的状态。同时在众多的jar中,我们需要相互配置依赖间的版本关系,十分的复杂
原始版本:
我们就想到能不能把这些jdbc整合起来,类似于深度学习中anaconda下载依赖一样去管理,依赖间的关系不需要我们去负责,而是交给spring去管理。
starter版本:
我们可以将starter包看作是一个包装箱,把复杂的事情都交给了spring负责,官方维护starter包会导入的东西。而我们只需要知道那个starter包是有什么用处,例如:spring-boot-starter-web是负责spring web项目的依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
二.starter内部详情
starter文件也只是一个pom文件,而不是jar,它的目的也是去自动的引入其他的jar文件,上图展示的spring-boot-starter-web中的依赖就有spring-boot-starter。
starter只是一个pom文件
下面也就是starter的关键所在,请问我们为什么引入了starter之后只需要配置一点点的个性化设置,例如创建application.properties仅仅配置端口等等就可以完成启动应用?是谁帮助我们配置了其他复杂的信息?
引出自动配置
三.自动配置
1.自动配置类的梳理
自动配置主要通过xxxAutoConfiguration这些类来实现,我们查找一个这样的类来进行示例演示
上图是DataSourceAutoConfiguration这个自动配置类,我们可以看到类上的几个注解。
- @Configuration 将该类标记为配置类, @Configuration注解的类可以看作是能生产让Spring IoC容器管理的Bean实例的工厂
- @ConditionalOnClass表示某个类位于类路径上时候,才会实例化这个bean
- @EnableConfigurationProperties注解的作用是使@ConfigurationProperties注解生效。如果只配置@ConfigurationProperties注解,在spring容器中是获取不到yml或者prope