前言,默认情况下,springboot加载Bean对象给IOC容器管理,默认基础路径就是当前标注@SpringBootApplication启动类路径。

一:@ComponentScan("com.xxx")

  • 当我们在springboot的启动类上面加上@ComponentScan(“com.xxx”)就是告诉spring去扫描根路径是:com.xxx下面的所有spring注解管理的Bean对象(其它第三方依赖jar包以com.xxx开头也会被扫描加载)将会被spring IOC容器管理。
    如下面spring注解管理的Bean对象:
@Component
@Service
@Controller
@Repository

例子:

@SpringBootApplication
@ComponentScan("com.xxx")
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application .class, args);
        System.out.println();
        System.out.println("(♥◠‿◠)ノ゙  启动成功   ლ(´ڡ`ლ)゙");
        System.out.println();
    }
}

二:@Import({Xxx.class})

  • 当我们在springboot的启动类上面加上@Import({Xxx.class})就是告诉spring去直接加载Xxx.class的Bean对象(其它第三方依赖jar包类是Xxx.class也会被加载)将会被spring IOC容器管理。

例子:

@SpringBootApplication
@Import({Xxx.class})
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application .class, args);
        System.out.println();
        System.out.println("(♥◠‿◠)ノ゙  启动成功   ლ(´ڡ`ლ)゙");
        System.out.println();
    }
}

三:spring.factories
此方式就是经常面试问及的springboot自动装配@EnableAutoConfiguration原理。
@EnableAutoConfiguration会扫描并加载:项目中第三方依赖jar包里面resources/META-INF/spring.factories文件中的全路径类,将会被spring IOC容器管理。

  • 假设A项目是一个springboot项目(依赖B项目),如下:
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application .class, args);
        System.out.println();
        System.out.println("(♥◠‿◠)ノ゙  A项目启动成功   ლ(´ڡ`ლ)゙");
        System.out.println();
    }
}
  • B项目的resources/META-INF/spring.factories文件,如下:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.xxx.A,\
  com.xxx.B


在这里插入图片描述

public class A {
  //省略
}
public class B {
  //省略
}

那么,A项目会加载所依赖的B项目下面的A.class、B.class两个类,将会被spring IOC容器管理。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐