SpringBoot原理-自动配置-方案

自动配置原理

  • 在运行SpringBoot项目启动类(@SpringBootApplication标注启动类)启动SpringBoot项目时,@SpringBootApplication是一个混合注解,包括
    • @SpringBootConfiguration()标识该类是一个配置类,其中可以定义一些Bean的配置信息。
    • @EnableAutoConfiguration(启用自动配置功能,默认条件下,Spring Boot会根据项目的依赖和配置信息,自动配置相应的组件和功能。该注解会自动加载启动类所在包及其子包定义的所有的自动配置类)
    • @ComponentScan(启用组件扫描,默认条件下,Spring Boot会自动扫描并注册启动类所在包及其子包带有@Component、@Controller、@Service、@Repository等注解的Bean。)

存在问题

  • 在上述的描述中可以发现,如果一个SpringBoot项目添加了一个第三方依赖(在pom.xml文件中天添加),默认情况下(注解作用范围默是启动类所在包及其子包),是无法将该依赖jar包中的bean以及配置类加载到当前SpringBoot项目的IOC容器中的。

解决方案

  • 方案一

    • @ComponentScan组件扫描
      • 在启动类上加入该注解,设置要扫描的包(注意默认扫描的包会被覆盖)
      • 不建议使用,因为一个SpringBoot项目会使用到非常多第三方依赖,一一添加扫描的包繁琐且不现实
      • package com.example.tlias;
        
        import org.dom4j.io.SAXReader;
        import org.springframework.boot.SpringApplication;
        import org.springframework.boot.autoconfigure.SpringBootApplication;
        import org.springframework.boot.web.servlet.ServletComponentScan;
        import org.springframework.context.annotation.Bean;
        import org.springframework.context.annotation.ComponentScan;
        import org.springframework.stereotype.Component;
        
        
        // Generated by https://start.springboot.io
        // 优质的 spring/boot/data/security/cloud 框架中文文档尽在 => https://springdoc.cn
        
        @ServletComponentScan  // todo 使当前项目于支持Servlet组件,Filter组件属于Servlet
        @SpringBootApplication
        @ComponentScan({"com.example.tlias","com.ithema"})
        public class TliasApplication {
            public static void main(String[] args) {
                SpringApplication.run(TliasApplication.class, args);
            }
        
        }
        
  • 方案二

    • @Import导入
    • 使用@Import导入的类会被Spring加载到IOC容器中,成为bean对象,导入形式主要有以下几种:
      • 导入普通类
      • 导入配置类
      • 导入ImportSelector接口实现类
        • 在自定义的该实现类中可以设置要交个IOC容器管理的bean对象和配置类
      • 在引入的第三方依赖中,一般会自动定义一个注解类(一般叫@Enablexxxx注解,并且封装了@Import注解)设置在该依赖中哪些bean和配置类需要注入到IOC容器中,所以我们也可以在启动类中添加上该注解来将需要注入到IOC容器中的bean对象和配置类进行注入。(方便简洁
        • 如下为一个依赖中注解类的示例
          • SpringBoot原理-自动配置-方案_第1张图片 

你可能感兴趣的:(Java,Web学习跟踪笔记,spring,boot,java,spring)