原创

springboot的依赖管理和自动配置


依赖管理

在使用maven创建一个默认项目时,在pom.xml文件里加入一个父工程

    <!--父工程-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.4.RELEASE</version>
    </parent>

再引入web场景开发的starter

<!--    web场景启动器-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
  
    </dependencies>

这样我们就可以使用springboot为我们提供的关于web开发的场景依赖了。 我们可以在spring的官网里查看所有的开发场景相关的starter https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.build-systems.starters

springboot的父项目的作用是依赖管理,在其父项目里还有父项目。在里面定义了许多依赖和版本号。 所以在pom.xml声明依赖的时候可以不用添加版本号 比如添加mysql依赖 在springboot的爷辈里定义了mysql的版本,所以我们就不需要定义mysql的版本号 springboot的爷辈几乎声明了所有开发中常用的依赖的版本号,称为自动版本仲裁机制

        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>${mysql.version}</version>
		
		<mysql.version>8.0.21</mysql.version>
		

倘若我们不需要使用自动仲裁的版本号,只需在pom.xml里定义

   <properties>
        <mysql.version>5.1.43</mysql.version>
    </properties>

我们在pom.xml里导入的

   <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

其实就是某个开发场景,导入了之后,会自动给我们导入这个场景常规的需要的依赖jar包。 见到很多 spring-boot-starter-就某种场景
SpringBoot所有支持的场景https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.build-systems.starters *见到的 -spring-boot-starter: 第三方为我们提供的简化开发的场景启动器。


自动配置

我们在引入web开发场景,springboot帮我们引入了tomcat,springmvc,logback,jackson,spring等等。 但是在以前的学习中,例如springmvc中我们需要配置最主要的DispatcherServlet以及filter,字符乱码等配置,在使用springboot后,我们不在需要去配置这些繁琐的配置。这称为自动配置。

默认包结构

我们在配置springboot的启动类时,会默认扫描启动类所在包及其子包下的带入容器注解的类进入容器,查看所有入容器的类

@SpringBootApplication
public class MainApplication {
    public static void main(String []args){
        //1:返回IOC容器
        ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
        //2:查看容器里面的组件
        String[] beanDefinitionNames = run.getBeanDefinitionNames();
        //依次遍历
        for (String beanDefinitionName : beanDefinitionNames) {
            System.out.println(beanDefinitionName);
        }
    }
}

如果想改变默认的扫描包的层级

@SpringBootApplication(scanBasePackages = "扫描的包")
留言