@componentscan 配置多个扫描包_Spring Boot 的自动配置这么牛,到底是怎么做到?

本文探讨了Spring Boot、Spring MVC和Spring的区别,强调Spring Boot的自动配置特性。文章详细解释了@SpringBootApplication注解背后的@Configuration、@EnableAutoConfiguration和@ComponentScan的作用,通过实例展示了如何简化传统XML配置。此外,还介绍了SpringFactoriesLoader和AutoConfigurationImportSelector在自动配置过程中的作用。
摘要由CSDN通过智能技术生成

作者:祖大帅
链接:juejin.im/post/5b679fbc5188251aad213110

SpringBoot 的故事从一个面试题开始

Spring Boot、Spring MVC 和 Spring 有什么区别?

b14f715262bb0ac39ab1653f287f6bc6.png

先来个 SpringBoot 的启动结构图

分开描述各自的特征

Spring 框架就像一个家族,有众多衍生产品例如 boot、security、jpa等等。但他们的基础都是Spring 的ioc和 aop,ioc 提供了依赖注入的容器, aop解决了面向横切面的编程,然后在此两者的基础上实现了其他延伸产品的高级功能。

Spring MVC提供了一种轻度耦合的方式来开发web应用。它是Spring的一个模块,是一个web框架。通过Dispatcher Servlet, ModelAndView 和 View Resolver,开发web应用变得很容易。解决的问题领域是网站应用程序或者服务开发——URL路由、Session、模板引擎、静态Web资源等等。

Spring Boot实现了自动配置,降低了项目搭建的复杂度。它主要是为了解决使用Spring框架需要进行大量的配置太麻烦的问题,所以它并不是用来替代Spring的解决方案,而是和Spring框架紧密结合用于提升Spring开发者体验的工具。同时它集成了大量常用的第三方库配置(例如Jackson, JDBC, Mongo, Redis, Mail等等),Spring Boot应用中这些第三方库几乎可以零配置的开箱即用(out-of-the-box)。

所以,用最简练的语言概括就是

.Spring 是一个“引擎”;  .Spring MVC 是基于Spring的一个 MVC 框架;  .Spring Boot 是基于Spring4的条件注册的一套快速开发整合包。

d5ee27250a8fdba1201aa596a14d7d0d.png

SpringBoot到底是怎么做到自动配置的?

从代码里看项目SpringBoot的项目启动类只有一个注解@SpringBootApplication和一个run方法。

@SpringBootApplication  
public class Application {  
    public static void main(String\[\] args) {  
        SpringApplication.run(Application.class, args);  
    }  
}

直接看@SpringBootApplication的代码:

@Target({ElementType.TYPE})  
@Retention(RetentionPolicy.RUNTIME)  
@Documented  
@Inherited  
@SpringBootConfiguration  
@EnableAutoConfiguration  
@ComponentScan(  
    excludeFilters = { @Filter(  
    type = FilterType.CUSTOM,  
    classes = {TypeExcludeFilter.class}  
), @Filter(  
    type = FilterType.CUSTOM,  
    classes = {AutoConfigurationExcludeFilter.class}  
)}  
)  
public @interface SpringBootApplication {  
    @AliasFor(  
        annotation = EnableAutoConfiguration.class  
    )  
    Class>\[\] exclude() default {};  

    @AliasFor(  
        annotation = EnableAutoConfiguration.class  
    )  
    String\[\] exclu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值